Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF中Datagrid列标题上的Shift图标_C#_Wpf_Datagrid - Fatal编程技术网

C# WPF中Datagrid列标题上的Shift图标

C# WPF中Datagrid列标题上的Shift图标,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一个datagrid,我想支持类似excel的过滤功能。 以下是列标题的屏幕截图: 我在列标题旁边添加了一个过滤器图标。问题是这个图标应该移到列的最右边。就在空圆圈的地方。用户可以使用鼠标拖动来调整列的大小,因此,当用户增加或减少宽度时,图标应粘贴在列的右端。 代码如下: <DataGridHyperlinkColumn Binding="{Binding PackageName}" MinWidth="250" IsReadOnly="True" >

我有一个datagrid,我想支持类似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>

我怎样才能做到这一点呢?

我正在写这篇文章。它会给你一个克服这个问题的想法。您可以通过使用网格或DockPanel来实现这一点。这是一个使用DockPanel的

编辑:

根据注释进行更新,您必须拉伸列标题的宽度,以占据@grek40所述的全部宽度

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

希望能有所帮助。

您需要确保标题内容实际使用的是标题的大小。我使用的Dockpanel与Gopichandar的答案和HeaderStyle定义类似

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

我试过使用网格,但它不起作用。原因是标题名(即包名)的宽度远远小于列的宽度。因为我们在DataGridHyperlinkColumn.Header中使用了grid或dockpanel,所以它不能解决这个问题。用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>