2010-08-14 26 views
7

嗨,我正在寻找一种方法来对齐我的树视图中的按钮,使它看起来像在同一列即使它在任何级别。 如:如何在wpf树视图上对齐按钮

Item1 [Button] 
Item2 [Button] 
Item3[Button] 

我希望它看起来像

Item1 [Button] 
Item2 [Button] 
Item3 [Button] 

什么办法,我可以做到这一点..?

回答

7

首先,看看这个博客条目Horizontal stretch on TreeViewItems。 TreeViewItem的默认ControlTemplate不允许扩展标题内容,您需要这样做。使用树型视图样式,作者建议,但改变

<Setter Property="HorizontalContentAlignment" Value="Center" /> 

<Setter Property="HorizontalContentAlignment" Value="Stretch" /> 

现在你将有一个树型视图,其中头部的内容跨越树型视图的整个宽度延伸。要让TreeViewItem使用文本和按钮进行渲染,请使用TreeView的ItemTemplate属性。如果你只是想按钮右对齐,你可以使用一个DockPanel中:

<TreeView.ItemTemplate> 
    <HierarchicalDataTemplate ItemsSource="{Binding ...}"> 
     <DockPanel LastChildFill="False"> 
      <TextBlock DockPanel.Dock="Left" Text="{Binding ...}"/> 
      <Button DockPanel.Dock="Right" Content="{Binding ...}"/> 
     </DockPanel> 
    </HierarchicalDataTemplate> 
</TreeView.ItemTemplate> 

如果键的内容可以具有可变的大小以及你希望它们都具有相同的宽度,请使用SharedSizeScope一个网格。在TreeView设置Grid.IsSharedSizeScope="True",然后在你的ItemTemplate做这样的事情:

<TreeView.ItemTemplate> 
    <HierarchicalDataTemplate ItemsSource="{Binding ...}"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition/> 
       <ColumnDefinition SharedSizeGroup="Buttons"/> 
      </Grid.ColumnDefinitions> 
      <TextBlock Text="{Binding ...}"/> 
      <Button Grid.Column="1" Content="{Binding ...}"/> 
     </Grid> 
    </HierarchicalDataTemplate> 
</TreeView.ItemTemplate> 
+0

很好的解决方案,我不认为使用Horizo​​ntalContentAlignment针对的... – 2010-08-14 22:55:49

+0

谢谢mate..it运作良好 – biju 2010-08-16 06:08:46