2011-12-07 16 views
12

Mam WPF DataGrid (.NET 4) z kolumn niestandardowych szablonów i stylów nagłówków i chciałby, aby móc dostosować rozmiar kolumn:WPF DataGrid Kolumna Resize Header z Style niestandardowe

<DataGridTemplateColumn.HeaderStyle> 
    <Style TargetType="DataGridColumnHeader"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="DataGridColumnHeader"> 
        <StackPanel Orientation="Horizontal"> 
         <Image Source="Images\monitor.png" Width="16" Height="16"/> 
         <TextBlock Text="Hostname" TextWrapping="Wrap" Padding="3"/> 
        </StackPanel> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</DataGridTemplateColumn.HeaderStyle> 

Kolumny nadal można sortować i zmieniać układ, ale nie zmieniać ich rozmiaru - chwytak się nie pokazuje. Widziałem odpowiedź this i patrzyłem na kontrolkę Kciuk, jednak wydaje się to ogromnym przesadą, aby odtworzyć funkcjonalność już dostarczoną. W blogu MSDN odwołuje się do StaticResource - RowHeaderGripperStyle, którego nie zapewniają!

Odpowiedz

18

zawsze robię to w ten sposób i działa całkiem dobrze:

<Style TargetType="DataGridColumnHeader"> 
    <!-- here goes some setters --> 

    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="DataGridColumnHeader"> 
       <Grid Margin="{TemplateBinding Padding}"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="Auto" /> 
        </Grid.ColumnDefinitions> 

        <!-- some stuff, like border etc. --> 

        <ContentPresenter /> 

        <Thumb x:Name="PART_RightHeaderGripper" Grid.Column="1" 
         HorizontalAlignment="Right" 
         Width="2" BorderThickness="1" 
         BorderBrush="{Binding VerticalGridLinesBrush, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}" 
         Cursor="SizeWE"/> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

To na pewno nie działa w sposób 'ListView' /' GridView' ('Thumb' jest martwy) –

+0

Ale pytanie było o DataGrid, nie ListView – SOReader

+3

Wiem, nie kwestionuję tego, nie padłem. Jest to po prostu dodatkowa uwaga dla osób, które natrafiają na twoją odpowiedź, szukając rozwiązania dla 'ListView' (tak jak byłem). To, czego mogą użyć, to http://geekswithblogs.net/lbugnion/archive/2008/05/06/wpf-listviewgridview-minimum-and-maximum-width-for-a-column.aspx –