kla*_*sel 4 wpf treeview xaml selection
我有一个带有分层数据模板的树
<HierarchicalDataTemplate DataType="{x:Type local:TreeItem}" ItemsSource="{Binding Path=Children}" >
<TreeViewItem Focusable="True" ToolTip="{Binding ToolTipText}" >
<TreeViewItem.Header>
<StackPanel Orientation="Horizontal" Focusable="True" >
<Image Width="16" Height="16" Margin="3,0">
<Image.Source>
<Binding
Path="IsLeaf" Converter="{StaticResource cnvIsBooleanToStringArrayItemConverter}">
<Binding.ConverterParameter>
<x:Array Type="sys:String">
<sys:String>..\Images\document_plain.png</sys:String>
<sys:String>..\Images\folder.png</sys:String>
</x:Array>
</Binding.ConverterParameter>
</Binding>
</Image.Source>
</Image>
<TextBlock MaxWidth="300" Text="{Binding Desc}" Focusable="True" />
</StackPanel>
</TreeViewItem.Header>
</TreeViewItem>
</HierarchicalDataTemplate>
Run Code Online (Sandbox Code Playgroud)
我想通过单击包含"Desc"的TextBlock来选择项目,但选择项目的唯一方法是单击文本左侧的空白(图像区域)
什么缺失的线索?
关心克劳斯
您的数据模板TreeViewItem
在其根目录中指定了一个,但TreeView将自动在您的模板周围创建一个TreeViewItem,TreeViewItem中的TreeViewItem会混淆选择机制.
做这样的事情:
<HierarchicalDataTemplate DataType="{x:Type local:TreeItem}" ItemsSource="{Binding Path=Children}">
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="ToolTip" Value="{Binding ToolTipText}"/>
<Setter Property="Focusable" Value="True"/>
<Setter Property="Header">
<Setter.Value>
...
</Setter.Value>
</Setter>
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
</HierarchicalDataTemplate>
Run Code Online (Sandbox Code Playgroud)
编辑:
经过一些测试后发现,弄乱容器是相当麻烦的,我没有得到它显示工具提示的方式,除非你找到了一种方法,我建议你坚持只设置HierarchicalDataTemplate.VisualTree
(HierarchicalDataTemplate的默认内容)它将被放置在自动生成的TreeViewItem的标头中.
正如HB所说,你不应该将TreeViewItem放在分层数据模板中,因为WPF会自动创建一个TreeViewItem来包装你的内容.
如果要绑定到工具提示,可以在ItemContainerStyle中执行,它将应用于TreeView中的所有树视图项.
<TreeView .... your parameters >
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="ToolTip" Value="{Binding ToolTipText}"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助.
虽然我还没有测试过,但我认为您的分层数据模板应如下所示:
<HierarchicalDataTemplate DataType="{x:Type local:TreeItem}" ItemsSource="{Binding Path=Children}" >
<StackPanel Orientation="Horizontal">
<Image Width="16" Height="16" Margin="3,0">
<Image.Source>
<Binding Path="IsLeaf" Converter="{StaticResource cnvIsBooleanToStringArrayItemConverter}">
<Binding.ConverterParameter>
<x:Array Type="sys:String">
<sys:String>..\Images\document_plain.png</sys:String>
<sys:String>..\Images\folder.png</sys:String>
</x:Array>
</Binding.ConverterParameter>
</Binding>
</Image.Source>
</Image>
<TextBlock MaxWidth="300" Text="{Binding Desc}"/>
</StackPanel>
</HierarchicalDataTemplate>
Run Code Online (Sandbox Code Playgroud)