WPF DataGrid -添加按钮到每行的末尾
本文关键字:DataGrid 添加 按钮 WPF | 更新日期: 2023-09-27 18:19:14
我想在数据网格的每一行的末尾添加一个按钮。我找到了下面的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 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>
查找带有某些样式的按钮控件。Style定义了一个Trigger元素,它可以根据按钮内容/文本改变按钮的背景属性和可见性。
<DataGrid ItemsSource="{Binding}" Name="dgvProcessLists" SelectionMode="Single">'
<DataGrid.Columns><DataGridTextColumn Binding="{Binding SIZE_FP}" FontFamily="Verdana" Header="SIZE FP" IsReadOnly="True" Width="100" />
<DataGridTemplateColumn Width="140" Header="Command">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="{Binding DB_STEP_NAME}" Tag="{Binding STEP_ORDER}" Click="btnContinue_Click" >
<Button.Style>
<Style x:Name="ButtonVisibility">
<Setter Property="Button.Visibility" Value="Hidden"/>
<Style.Triggers>
<DataTrigger Binding="{Binding STATUS}" Value="Failed">
<Setter Property="Button.Visibility" Value="Visible"/>
<Setter Property="Button.Background" Value="#777777"/>
</DataTrigger>
<DataTrigger Binding="{Binding STATUS}" Value="Execute">
<Setter Property="Button.Visibility" Value="Visible"/>
<Setter Property="Button.Background" Value="AliceBlue"/>
</DataTrigger>
<DataTrigger Binding="{Binding STATUS}" Value="Re-Evaluate">
<Setter Property="Button.Background" Value="Blue"/>
</DataTrigger>
<DataTrigger Binding="{Binding STATUS}" Value="Final">
<Setter Property="Button.Visibility" Value="Visible"/>
<Setter Property="Button.Background" Value="Blue"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</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>
您可以通过转换器的名称选择哪个列!
我这样创建了我的列:(也许它与另一种方法一起工作)
DataGridTextColumn column = new DataGridTextColumn();
column.Binding = new Binding("ColumnName");
dataGrid.Columns.Add(column)
在您的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}" />
将ColumnName
替换为您的列名…
你的转换器:
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;
}
}
}