带有headertext的列标题中的WPF datagrid按钮 - c#

时间:2015-09-23 07:32:06

标签: c# wpf xaml button datagrid

我有一个WPF数据网格,我想在特定的列标题上应用一个按钮。我设法插入按钮,但HeaderText消失了。在这个例子中,我必须绑定到我的TextBlock上的headertext是“Match Ausdruck”吗?

我如何访问此按钮?

我的App.xaml:

<Style x:Key="columnHeaderButton" TargetType="DataGridColumnHeader">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate>
                            <StackPanel Orientation="Horizontal" Width="auto">
                            <TextBlock Text="Test" VerticalAlignment="Center" />
                            <Button Style="{StaticResource MyButton}" Width="16" Height="16" VerticalAlignment="Center">
                                <Button.Background>
                                    <ImageBrush ImageSource="Resources/filter.png"/>
                                </Button.Background>
                            </Button>
                        </StackPanel>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

My MainWindow.xaml:

 <DataGrid x:Name="dgVarConfig" HorizontalAlignment="Left" Margin="10,59,0,0" VerticalAlignment="Top" Height="403" Width="1278" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="False" HeadersVisibility="Column">

            <DataGrid.Columns>
                <DataGridTextColumn HeaderStyle="{StaticResource columnHeaderButton}" Width="auto" Header="Match Ausdruck" Binding="{Binding match_expression}"></DataGridTextColumn>
            </DataGrid.Columns>
</DataGrid>

2 个答案:

答案 0 :(得分:1)

据我了解您的问题,您必须调整ControlTemplate以使其中包含一些ContentPresenter

<ControlTemplate>
    <StackPanel Orientation="Horizontal" Width="auto">
        <ContentPresenter Content={TemplateBinding Content}" />
        <Button Style="{StaticResource MyButton}" Width="16" Height="16" VerticalAlignment="Center">
            <Button.Background>
                <ImageBrush ImageSource="Resources/filter.png"/>
            </Button.Background>
        </Button>
    </StackPanel>
</ControlTemplate>

使用任何ContentPresenter调整TemplateBinding属性,例如VerticalAlignmentHorizontalContentAlignment

答案 1 :(得分:0)

我知道这是一篇很老的帖子,但是我很难找到这方面的信息,所以这里对我有用。首先,我假设您询问的TextBlock是当前显示“Test”的那个,除了不显示列名外,其他一切都正常。在这种情况下,您可以像这样设置Text属性:

<TextBlock Text="{Binding}"/>

在旁注上,我知道这不是你要问的,你也可以让按钮显示如下的列文:

<Button>
    <TextBlock Text="{Binding}"/>
</Button>