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