gpt4 book ai didi

c# - 使用 FrameworkElementFactory 在 WPF 中创建网格

转载 作者:行者123 更新时间:2023-11-30 23:10:57 26 4
gpt4 key购买 nike

简而言之,我正在将静态 XAML 描述 UI 转换为动态创建的 UI。这是我想在 c# 中复制的 XAML 代码:

<GridViewColumn.HeaderTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0"
Margin="4,0,5,0"
VerticalAlignment="Center"
IsChecked="{Binding Path=DataContext.AreAllSelected,
RelativeSource={RelativeSource AncestorType=ListView},
Mode=OneWay}"
Command="{Binding Path=DataContext.ChangeAllSourcesSelection,
RelativeSource={RelativeSource AncestorType=ListView}}" />
<TextBlock Grid.Column="1"
VerticalAlignment="Center"
UI:DisplayedObjectProperties.DisplayedObject="{Binding}" />
</Grid>
</DataTemplate>
</GridViewColumn.HeaderTemplate>

这是我想出的:

GridViewColumn col = new GridViewColumn();

DataTemplate template = new DataTemplate();

FrameworkElementFactory gridFactory = new FrameworkElementFactory(typeof(Grid));
FrameworkElementFactory col1 = new FrameworkElementFactory(typeof(ColumnDefinition));
FrameworkElementFactory col2 = new FrameworkElementFactory(typeof(ColumnDefinition));

col1.SetValue(ColumnDefinition.WidthProperty, new GridLength(1, GridUnitType.Auto));
col2.SetValue(ColumnDefinition.WidthProperty, new GridLength(1, GridUnitType.Star));
gridFactory.AppendChild(col1);
gridFactory.AppendChild(col2);

FrameworkElementFactory boxFactory = new FrameworkElementFactory(typeof(CheckBox));
boxFactory.SetValue(Grid.ColumnProperty, 1);
boxFactory.SetValue(FrameworkElement.VerticalAlignmentProperty, VerticalAlignment.Center);
FrameworkElementFactory tBlockFactory = new FrameworkElementFactory(typeof(TextBlock));
tBlockFactory.SetValue(Grid.ColumnProperty, 2);
tBlockFactory.SetValue(FrameworkElement.VerticalAlignmentProperty, VerticalAlignment.Center);
tBlockFactory.SetValue(TextBlock.TextProperty, LanguageManager.Parse(columnVM.ColumnName));

gridFactory.AppendChild(boxFactory);
gridFactory.AppendChild(tBlockFactory);
template.VisualTree = gridFactory;

col.HeaderTemplate = template;

但是这并没有给我预期的效果,因为 CheckBox 和 TextBlock 似乎都在同一列中。如何将每个分配给相应的列?如您所见,我做了一些奇怪的附加操作,因为我不知道自己在做什么。

Here is the result I want:

最佳答案

您应该将 TextBlockGrid.Column 附加属性设置为 1:

tBlockFactory.SetValue(Grid.ColumnProperty, 1);

没有理由为 boxFactory 设置属性,因为它应该具有默认值 0。

关于c# - 使用 FrameworkElementFactory 在 WPF 中创建网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45036667/

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