【问题标题】:Shift icon on Datagrid column header in WPFWPF 中 Datagrid 列标题上的 Shift 图标
【发布时间】:2017-04-04 05:38:02
【问题描述】:

我有一个数据网格,我想为它支持类似过滤器功能的 excel。 这是列标题的屏幕截图:

我在列标题旁边添加了一个过滤器图标。问题是这个图标应该移到列的最右边。就在空圆圈的位置。用户可以使用鼠标拖动来调整列的大小,因此当用户增加或减少宽度时,图标应该贴在列的右端。 代码如下:

<DataGridHyperlinkColumn Binding="{Binding PackageName}"  MinWidth="250" IsReadOnly="True" >
                        <DataGridHyperlinkColumn.Header>
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="Package Name"/>
                                <Button Name="PackageNameFilter" Click="PackageNameFilter_Click" HorizontalAlignment="Right">
                                    <Button.Template>
                                        <ControlTemplate>
                                            <Image Source="/Resources/filter.png" Width="10" Height="10"/>
                                        </ControlTemplate>
                                    </Button.Template>
                                </Button>
                            </StackPanel>
                        </DataGridHyperlinkColumn.Header>

我怎样才能做到这一点?

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    我正在写这篇文章。它会给你一个想法来克服这个问题。您可以使用GridDockPanel 来实现此目的。这是使用DockPanel的那个

    <DataGridHyperlinkColumn.Header>
        <DockPanel>
             <TextBlock Text="Package Name"/>
             <Button DockPanel.Dock="Right" />
        </DockPanel>
    </DataGridHyperlinkColumn.Header>
    

    编辑:

    基于 cmets 的更新,您必须拉伸列标题的宽度以占据@grek40 提到的整个宽度

    <DataGridTextColumn.HeaderStyle>
        <Style TargetType="DataGridColumnHeader">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    </DataGridTextColumn.HeaderStyle>
    

    希望对您有所帮助。

    【讨论】:

    • 我尝试使用网格,但它不起作用。原因是标题名称的宽度,即“包名称”远小于列的宽度。由于我们在 DataGridHyperlinkColumn.Header 中使用网格或停靠面板,因此无法解决问题。也尝试使用停靠面板,它仍然保持不变。
    • 谢谢。这有帮助。
    【解决方案2】:

    您需要确保标头内容实际使用标头的大小。我正在使用类似于 Gopichandar 的答案和 HeaderStyle 定义的 Dockpanel。

    <DataGridHyperlinkColumn Binding="{Binding Test}" Width="*">
        <DataGridHyperlinkColumn.Header>
            <DockPanel LastChildFill="False">
                <TextBlock Text="Header Text"/>
                <Button DockPanel.Dock="Right" Content="Filter"/>
            </DockPanel>
        </DataGridHyperlinkColumn.Header>
        <DataGridHyperlinkColumn.HeaderStyle>
            <Style TargetType="DataGridColumnHeader">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            </Style>
        </DataGridHyperlinkColumn.HeaderStyle>
    </DataGridHyperlinkColumn>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      • 2011-09-20
      • 2013-01-05
      • 2018-03-20
      • 2014-01-14
      • 1970-01-01
      相关资源
      最近更新 更多