2012-08-28 14 views
0

我在WPF中使用telerik TreeView,我使用HierarchicalDataTemplate來顯示節點。節點代表匹配的項目 - 只能保留,僅保留,相等或不相等(基於樹的比較)。基於父控件的大小設置數據模板的寬度

我目前使用DataTemplateSelector從四種模板中選擇一個,而這一切看起來類似於以下內容:

<HierarchicalDataTemplate x:Key="EqualTreeItemTemplate" ItemsSource="{Binding}"> 
     <Grid Name="rowGrid" HorizontalAlignment="Stretch" Height="Auto" d:DataContext="{d:DesignInstance Carbon:ICarbonComparisonPair }"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="16" /> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <Path Data="F1M574.042,314.611L533.8,344.398 522.251,328.798 515.235,333.988 526.786,349.593 526.782,349.596 531.978,356.603 579.235,321.622 574.042,314.611z" Stretch="Uniform" Fill="#FF000000" Width="16" Height="16" VerticalAlignment="Center" Margin="0,0,0,0" /> 
      <TextBlock Grid.Column="1" Text="{Binding ObjectName}" Style="{StaticResource ObjectNameStyle}" Margin="4,0,0,0" /> 
      <TextBlock Grid.Column="2" Text="{Binding ObjectName}" Style="{StaticResource ObjectNameStyle}" Margin="4,0,0,0" /> 
     </Grid> 
    </HierarchicalDataTemplate> 

我已經是該項目的內容區域是基於不同寬度的問題該項目出現的樹的級別。這意味着我擁有的列不會對齊 - 右邊列中的文本會向您展開的樹的每個級別右移一點。

我想要做的是將右側柵格列的寬度指定爲整個樹形控件大小的50%,而不是網格自然面積的50%。我想也許我可以用一個RelativeSource綁定來做到這一點,但我似乎無法使它工作。有沒有辦法在XAML中實現這一點,還是我需要訴諸代碼隱藏?

回答

1

如果我正確理解它,你希望列索引2跨所有項目對齊?

查看TreeListView控件,看看是否給你你需要的東西。

Silverlight的演示here(只是讓你可以看到它的樣子 - WPF的版本是幾乎相同的)

[編輯 - 更多信息] 上ColumnDefinition的SharedGroupName屬性是誘人的,但是,由於縮進,它不會工作 - 你會以列1或2中的所有內容大小相同,但討厭的縮進仍然拋出它。查看ListView的視圖屬性。我相信它至少和Telerik TreeListView是一樣的精神,如果不是類似的實現。

Here's a decent writeup關於如何使用它。 (具有諷刺意味的是,我把那個頁面放在一個名爲「TreeGridList」的文件夾中,所以顯然在某些時候我有這樣的想法來完成類似的事情:))

+0

我確實看到了那個,但我正在尋找一種方法在TreeView中專門做 - 部分原因是我想擴展我的WPF知識。但我可能會承認失敗,並與TreeListView。謝謝。 –

相關問題