使用代码隐藏仅添加按钮动态生成WPF DataGrid列';s头
我有一个wpf datagrid,它在代码中动态生成列,我需要在文本右侧的每列标题中插入小按钮,以在弹出对话框中实现自定义(复杂)过滤 我不知道如何仅使用代码隐藏将按钮插入datagrid列标题 这是我开始走的路线(注释掉了一点),但它不起作用:使用代码隐藏仅添加按钮动态生成WPF DataGrid列';s头,wpf,button,datagrid,header,Wpf,Button,Datagrid,Header,我有一个wpf datagrid,它在代码中动态生成列,我需要在文本右侧的每列标题中插入小按钮,以在弹出对话框中实现自定义(复杂)过滤 我不知道如何仅使用代码隐藏将按钮插入datagrid列标题 这是我开始走的路线(注释掉了一点),但它不起作用: private static DataGridTextColumn GetTextColumn(string ColumnName, string FormatString, bool AlignRight) { D
private static DataGridTextColumn GetTextColumn(string ColumnName, string FormatString, bool AlignRight)
{
DataGridTextColumn c = new DataGridTextColumn();
c.Header = Test.Common.UIBizObjectCache.LocalizedText.GetLocalizedText(ColumnName);
c.Binding = new System.Windows.Data.Binding(ColumnName);
if (!string.IsNullOrWhiteSpace(FormatString))
c.Binding.StringFormat = FormatString;
if (AlignRight)
{
Style cellRightAlignedStyle = new Style(typeof(DataGridCell));
cellRightAlignedStyle.Setters.Add(new Setter(DataGridCell.HorizontalAlignmentProperty, HorizontalAlignment.Right));
c.CellStyle = cellRightAlignedStyle;
}
//var buttonTemplate = new FrameworkElementFactory(typeof(Button));
//buttonTemplate.Text = "X";
//buttonTemplate.AddHandler(
// Button.ClickEvent,
// new RoutedEventHandler((o, e) => HandleColumnHeaderButtonClick(o, e))
// );
//c.HeaderTemplate=new DataTemplate(){VisualTree = buttonTemplate};
return c;
}
我得到一个invalidoperationexception“'ContentPresenter'类型必须实现要在FrameworkElementFactory AppendChild中使用的IAddChild。”
显然我做错了非常感谢您的帮助。您需要使用模板吗?如果不使用正常属性:
string colProperty = "Name";
DataGridTextColumn col = new DataGridTextColumn();
col.Binding = new Binding(colProperty);
var spHeader = new StackPanel() { Orientation = Orientation.Horizontal };
spHeader.Children.Add(new TextBlock(new Run(colProperty)));
var button = new Button();
button.Click += Button_Filter_Click;
button.Content = "Filter";
spHeader.Children.Add(button);
col.Header = spHeader;
dataGrid.Columns.Add(col);
您需要使用模板吗?如果不使用正常属性:
string colProperty = "Name";
DataGridTextColumn col = new DataGridTextColumn();
col.Binding = new Binding(colProperty);
var spHeader = new StackPanel() { Orientation = Orientation.Horizontal };
spHeader.Children.Add(new TextBlock(new Run(colProperty)));
var button = new Button();
button.Click += Button_Filter_Click;
button.Content = "Filter";
spHeader.Children.Add(button);
col.Header = spHeader;
dataGrid.Columns.Add(col);
要使用图像按钮创建列标题,可以在xaml中执行此操作:
<Window.Resources>
<BitmapImage x:Key="Img" UriSource="/Img/yourImage.png"/>
</Window.Resources>
<Datagrid Name="yourDatagrid">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="Btn" Click="Btn_Click" >
<DockPanel>
<Image Source="{StaticResource ResourceKey=Img}" Height="16" Width="16"/>
</DockPanel>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</Datagrid>
要使用图像按钮创建列标题,可以在xaml中执行此操作:
<Window.Resources>
<BitmapImage x:Key="Img" UriSource="/Img/yourImage.png"/>
</Window.Resources>
<Datagrid Name="yourDatagrid">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="Btn" Click="Btn_Click" >
<DockPanel>
<Image Source="{StaticResource ResourceKey=Img}" Height="16" Width="16"/>
</DockPanel>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</Datagrid>
我现在可以吻你了!:)它工作得很好,现在我只需要读一些书来确保我完全理解它。我现在可以吻你了!:)它工作得很好,现在我只需要做一些阅读,以确保我完全理解它。