我有一个带有分层数据模板的树
<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>
我想通过单击包含“Desc”的TextBlock来选择项目,但选择项目的唯一方法是单击文本左侧的空白区域(图像区域)
有哪些线索缺失?
此致 克劳斯
答案 0 :(得分:7)
您的数据模板在其根目录指定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>
修改强>
经过一些测试后发现,弄乱容器非常麻烦,我没有让它显示工具提示,除非你找到了办法,我建议你坚持只设置HierarchicalDataTemplate.VisualTree
(默认内容) HierarchicalDataTemplate)将放置在自动生成的TreeViewItem的标头中。
答案 1 :(得分:5)
H.B.说,你不应该在你的分层数据模板中放置一个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>
我希望这会有所帮助。
虽然我没有测试过,但我认为您的分层数据模板应如下所示:
<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>
答案 2 :(得分:0)
您可能需要设置背景=&#34;透明&#34;在StackPanel上和/或删除TextBlock上的Focusable设置。