我正在Grid
使用以下代码在运行时添加一个控件:
void AddControl(UserControl oControl)
{
grid.Children.Add(oControl);
oControl.SetValue(Grid.RowProperty, 1);
oControl.SetValue(Grid.ColumnProperty, 0);
}
我想删除同一位置的控件(行 = 1,列 = 0)。我没有保留对之前添加的控件的引用。如何从Grid
?
我有两个用户控件,其中有一些功能。在主窗口中,我有两个按钮。单击第一个时,我将 UserControl1 设置在第二行,单击第二个时,我将 UserControl2 设置在同一位置
为了实现这一目标,您需要的是TabControl
:
<TabControl>
<TabItem Header="Tab 1">
<Grid Background="Gray">
<TextBlock Text="Here goes UserControl 1"
VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
</TabItem>
<TabItem Header="Tab 2">
<Grid Background="Gray">
<TextBlock Text="Here goes UserControl 2"
VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
</TabItem>
</TabControl>
结果:
为什么在代码后面添加控件不好?
因为它造成了可维护性混乱。UI 元素必须在 XAML 中定义。这就是 XAML 的用途。在后面的代码中创建 UI 元素不仅需要更多代码,而且容易出错,并且完全破坏了 XAML 支持的 UI 和代码分离。
如果我需要动态创建 UI 怎么办?
然后你必须使用DataTemplates
XAML 中定义的。可选地DataTriggers
用于根据 Model / ViewModel 中的某些属性修改 UI 元素的状态
WPF 的“动态”思想确实与传统的 UI 框架不同。