2011-12-07 95 views
12

我有一个DataGrid的WPF(.NET 4)自定义模板栏和标题样式,并希望能够调整列的大小:WPF DataGrid列头调整大小与自定义样式

<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> 

列仍然可以排序和重新排列,但不能调整大小 - 抓手不显示。我见过this的答案,并看着拇指控制,但这似乎是大规模矫枉过正重现已提供的功能。 MSDN博客文章引用了一个StaticResource - 它们不提供的RowHeaderGripperStyle!

回答

18

我总是做这样的,它非常精细:

<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

它肯定不会在工作中'ListView' /'GridView'('Thumb'是死的) –

+0

但问题是关于DataGrid,而不是ListView – SOReader

+3

我知道,我没有质疑,我没有downvote。这只是留给那些遇到你的答案寻找“ListView”解决方案的人留下的一个附注(像我一样)。他们可以使用的是用于ListView的源代码的http://geekswithblogs.net/lbugnion/archive/2008/05/06/wpf-listviewgridview-minimum-and-maximum-width-for-a-column.aspx –