2011-03-25 56 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