C# WPF DataGrid-将按钮添加到每行的末尾

C# WPF DataGrid-将按钮添加到每行的末尾,c#,wpf,datagrid,C#,Wpf,Datagrid,我想在datagrid的每一行末尾添加一个按钮。我找到了以下xaml,但它在开始处添加了按钮。有人知道我如何在所有数据绑定列之后添加它吗 这会将按钮添加到开始而不是结束: <DataGrid Background ="Black" ItemsSource="{Binding PriceList}"> <DataGrid.Columns> <DataGridTemplateColumn> <DataGridTempl

我想在datagrid的每一行末尾添加一个按钮。我找到了以下xaml,但它在开始处添加了按钮。有人知道我如何在所有数据绑定列之后添加它吗

这会将按钮添加到开始而不是结束:

  <DataGrid Background ="Black" ItemsSource="{Binding PriceList}">
    <DataGrid.Columns>
      <DataGridTemplateColumn>
        <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
            <Button>My button</Button>
          </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
    </DataGrid.Columns>
  </DataGrid>

我的纽扣

非常感谢如果您的DataGrid看起来像这样,请尝试以下示例:

 <DataGrid ItemsSource="{Binding PriceList}">
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal"> 
                           <TextBlock Text="{Binding }"/>
                           <Button>My button</Button>
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

我的纽扣

您必须手动添加列

关闭列的自动生成,并按所需顺序添加列,包括在列表末尾添加额外列:

  <DataGrid Background ="Black"
            ItemsSource="{Binding PriceList}"
            AutoGenerateColumns="False">
    <DataGrid.Columns>

      <!-- Add your normal columns here -->

      <DataGridTemplateColumn>
        <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
            <Button>My button</Button>
          </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
    </DataGrid.Columns>
  </DataGrid>

我的纽扣

查找具有某些样式的按钮控件。样式定义了一个触发器元素,该元素根据按钮内容/文本更改按钮的背景属性和可见性

\

您可以使用转换器按名称选择哪一列

我创建的专栏是这样的:(也许它可以与其他方法一起使用)

当列具有特定名称时,在
DataTrigger
中定义不同的
DataTemplate

...
xmlns:tools="clr-namespace:App.Tools"
...

<ResourceDictionary>

    <tools:CustomButtonConverter x:Key="CustomButtonConv" />

    <DataTemplate x:Key="CustomButton">
        <Button Click="HandlerClick" />
    </DataTemplate>

    <Style x:Key="DataGridCellStyle" TargetType="DataGridCell">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Column, RelativeSource={RelativeSource Mode=Self}, Converter={StaticResource CustomButtonConv}}" Value="ColumnName">
                <Setter Property="ContentTemplate" Value="{StaticResource CustomButton}" />
            </DataTrigger>
        </Style.Triggers>
    </Style>

</ResourceDictionary>

...

<DataGrid x:Name="dataGrid" CellStyle="{StaticResource DataGridCellStyle}" />

这个绑定是如何工作的?
...
xmlns:tools="clr-namespace:App.Tools"
...

<ResourceDictionary>

    <tools:CustomButtonConverter x:Key="CustomButtonConv" />

    <DataTemplate x:Key="CustomButton">
        <Button Click="HandlerClick" />
    </DataTemplate>

    <Style x:Key="DataGridCellStyle" TargetType="DataGridCell">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Column, RelativeSource={RelativeSource Mode=Self}, Converter={StaticResource CustomButtonConv}}" Value="ColumnName">
                <Setter Property="ContentTemplate" Value="{StaticResource CustomButton}" />
            </DataTrigger>
        </Style.Triggers>
    </Style>

</ResourceDictionary>

...

<DataGrid x:Name="dataGrid" CellStyle="{StaticResource DataGridCellStyle}" />
namespace App.Tools
{
    public class CustomButtonConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var dataGridTextColumn = value as DataGridTextColumn;
            return dataGridTextColumn.SortMemberPath;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return value;
        }
    }
}