2011-03-25 127 views
4

我有一个树的分层数据模板点击TreeView项选择不工作

<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> 

我想通过点击含有“说明” TextBlock的选择项目,而是要选择一个项目的唯一途径通过点击文本左侧的空白(图像区域)

任何线索什么是缺失?

问候 克劳斯

回答

5

作为H.B.说,你不应该在你的分层数据模板中放置一个TreeViewItem,因为WPF会自动创建一个来包装你的内容。

如果你想绑定到工具提示,你可以在ItemContainerStyle中执行它,它将适用于全部你的TreeView中的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> 
+0

这是非常合情合理的 - 和作品 – klawusel 2011-03-27 19:23:29

0

您可能需要设置背景=在StackPanel的“透明”和/或删除TextBlock的可聚焦设置。

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的头部。

+0

错过了:-) – CodeNaked 2011-03-25 15:59:24