2010-08-14 25 views
7

Hola, estoy buscando una forma de alinear los botones en mi vista de árbol para que se vea como en la misma columna, incluso si está en cualquier nivel. Ej:Cómo alinear el botón en wpf treeview

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

quiero que se vea como

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

Cualquier manera que yo puedo hacer esto ..?

Respuesta

7

En primer lugar, eche un vistazo a esta entrada de blog Horizontal stretch on TreeViewItems. El ControlTemplate predeterminado para TreeViewItem no permite que el contenido del encabezado se extienda, lo cual necesitará que haga. Utilice el estilo TreeViewItem que el autor recomienda, pero cambiar

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

a

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

Ahora usted tendrá un TreeViewItem donde el contenido de la cabecera se extiende por todo el ancho de la TreeViewItem. Para hacer que TreeViewItem represente con texto más un botón, use la propiedad ItemTemplate de TreeView. Si lo que desea es los botones alineado a la derecha, se puede utilizar un 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> 

Si el contenido de los botones pueden tener dimensiones variables y desea que todos ellos tienen la misma anchura, utilizan una cuadrícula con SharedSizeScope. Establecer Grid.IsSharedSizeScope="True" en el árbol y luego en su ItemTemplate hacer algo como esto:

<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

solución de Niza, que no pensó en utilizar HorizontalContentAlignment para eso ... –

+0

Gracias mate..it funcionaron bien – biju