2010-08-14 5 views
7

Ciao sto cercando un modo per allineare i pulsanti nella mia vista ad albero in modo che possa apparire nella stessa colonna anche se è in qualsiasi livello. Ad esempio:Come allineare il pulsante su wpf treeview

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

voglio farlo sembrare come

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

un modo che io possa fare questo ..?

risposta

7

Per prima cosa, dare un'occhiata a questo post di blog Horizontal stretch on TreeViewItems. Il ControlTemplate predefinito per TreeViewItem non consente l'allungamento del contenuto dell'intestazione, che sarà necessario eseguire. Utilizzare lo stile TreeViewItem che l'autore suggerisce, ma cambiare

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

a

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

Ora si avrà una TreeViewItem in cui il contenuto di intestazione si estende per tutta la larghezza della TreeViewItem. Per ottenere TreeViewItem da eseguire il rendering con il testo più un pulsante, utilizzare la proprietà ItemTemplate di TreeView. Se si desidera solo i pulsanti allineato a destra, è possibile utilizzare 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> 

Se il contenuto dei tasti possono avere dimensioni variabili e si vuole a tutti di avere la stessa larghezza, utilizzare una griglia con SharedSizeScope. Impostare Grid.IsSharedSizeScope="True" nel controllo TreeView e quindi nel vostro ItemTemplate fare qualcosa di simile:

<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

bella soluzione, non pensavo di usare HorizontalContentAlignment per questo ... –

+0

Grazie mate..it hanno funzionato bene – biju