【问题标题】:WPF DataGrid Column Header Resize with Custom StyleWPF DataGrid 列标题使用自定义样式调整大小
【发布时间】:2012-01-14 22:18:25
【问题描述】:

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

<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 的回答并查看了 Thumb 控件,但是这似乎对于重现已经提供的功能来说太过分了。 MSDN 博客文章引用了他们不提供的 StaticResource - RowHeaderGripperStyle!

【问题讨论】:

    标签: c# .net wpf datagrid


    【解决方案1】:

    我总是这样做,而且效果很好:

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

    【讨论】:

    • 我知道,我没有质疑这一点,我没有投反对票。对于遇到您的答案以寻找ListView 的解决方案的人来说,这只是一个旁注(就像我一样)。他们可以使用的是geekswithblogs.net/lbugnion/archive/2008/05/06/…
    • 将 Thumb 命名为:PART_RightHeaderGripper 很重要,如代码示例中所述。我没有这样做,然后它没有按预期工作!
    • 我知道这是一篇旧帖子,但它会为那些希望在 ListView 上自定义调整大小的人节省一些研究,只需将名称从 PART_RightHeaderGripper 更改为 PART_HeaderGripper
    • 如果有人想知道如何将拖动手柄移到左侧,x:Name="PART_LeftHeaderGripper" HorizontalAlignment="Left" 有效。
    • 感谢@SOReader。
    猜你喜欢
    • 2018-06-11
    • 1970-01-01
    • 2011-11-20
    • 2011-01-12
    • 2016-01-22
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    相关资源
    最近更新 更多