gpt4 book ai didi

c# - 如何以编程方式为 DataGrid 设置 RowHeaderTemplate?

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:47 25 4
gpt4 key购买 nike

我有一个用 XAML 编写的 WPF DataGrid,我正在将其转换为 C#(不要问)。

它看起来像这样(为了简洁省略了一些属性):

var Card = new DataGrid() {
Background = Brushes.LightYellow,
BorderBrush = Brushes.DimGray,
ColumnWidth = new DataGridLength(100),
Columns = {
new DataGridTextColumn() {
Binding = new Binding("In"),
Header = "In"
},
new DataGridTextColumn() {
Binding = new Binding("Out"),
Header = "Out"
},
new DataGridTextColumn() {
Binding = new Binding("Hours"),
Header = "Hours"
}
},
RowHeaderTemplate = new DataTemplate(typeof(DataGridRowHeader)) {
VisualTree = Days
},
RowHeaderWidth = 115,
RowHeight = 50
};

Days 设置如下:

var Days = new FrameworkElementFactory(typeof(TextBlock));
Days.SetBinding(TextBlock.TextProperty, new Binding("Day"));
Days.SetValue(TextBlock.BackgroundProperty, Brushes.Lime);

运行时,DataGridRowHeader 为空白(LightYellow,而不是Lime)。

我也尝试过 Card.RowHeaderTemplate.VisualTree = Days;,但无济于事。

我哪里错了?如何以编程方式设置 RowHeaderTemplate

最佳答案

应使用从 XAML 加载来创建模板。使用元素工厂已过时且不再受支持(它可能在某些情况下有效,但在其他情况下无效)。

例如,Caliburn.Micro creates default data templates像这样:

    public static DataTemplate DefaultHeaderTemplate = (DataTemplate)
#if SILVERLIGHT || WinRT
XamlReader.Load(
#else
XamlReader.Parse(
#endif
"<DataTemplate " +
" xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'>" +
" <TextBlock Text=\"{Binding DisplayName, Mode=TwoWay}\" />" +
"</DataTemplate>"
);

您可能会发现有用的另一个链接:Creating WPF Data Templates in CodeThe Right Way .它包括使用 XML 和 XAML 类创建 XAML 字符串的示例,以及对程序集和内容的引用。

关于c# - 如何以编程方式为 DataGrid 设置 RowHeaderTemplate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25477323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com