【问题标题】:How to get and remove the control at a position from the Grid如何从网格中获取和删除某个位置的控件
【发布时间】:2013-04-12 14:24:59
【问题描述】:

我在运行时使用以下代码在 Grid 中添加一个控件:

void AddControl(UserControl oControl)
{
    grid.Children.Add(oControl);
    oControl.SetValue(Grid.RowProperty, 1);
    oControl.SetValue(Grid.ColumnProperty, 0);
}

我想删除相同位置的控件(行 = 1,列 = 0)。我没有保留对之前添加的控件的引用。如何从Grid 中获取和删除某个位置(行 = 1 和列 = 0)的控件?

【问题讨论】:

  • I am adding a control at run-time in a Grid... 在 WPF 中通常不会这样做。在代码中创建/操作 UI 元素不是一个好习惯。请说明您需要做什么,我可以告诉您在 WPF 中实现它的正确方法。
  • @HighCore ,我有两个用户控件,其中有一些功能。在主窗口中,我有两个按钮。单击第一个时,我将 UserControl1 设置在第二行,单击第二个时,我将 UserControl2 设置在同一位置。
  • @Brij 看起来你需要一个 Tab 控件。
  • @Brij 同意 torrentialcoding,你需要一个TabControl

标签: c# .net wpf grid runtime


【解决方案1】:

我有两个用户控件,其中有一些功能。在里面 主窗口我有两个按钮。单击第一个我正在设置 第二行中的 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 和代码分离。

如果我需要动态创建用户界面怎么办?

那么你必须使用在 XAML 中定义的DataTemplates。可选地使用DataTriggers根据模型/视图模型中的某些属性修改UI元素的状态

WPF 的“动态”理念确实与传统的 UI 框架不同。

【讨论】:

  • +1 用于解释。我仍然认为在某些情况下您需要在代码后面做这些事情。谢谢!
  • 只是一个小例子。我有列表。它包含 DateTime、String、Integer .... 我想将 DatePicker 用于 DateTime 类型,我想将 Slider 用于 Integer .... 类似的东西。 XAML 可以吗?
  • @Dilshod 是的,只需使用ListBox 或其他ItemsControl 派生元素,并为每种类型使用适当的DataTemplates。如果你愿意,可以发布一个新问题,我可以举个例子。
  • 这里有个问题。 stackoverflow.com/questions/15977354/…。谢谢
  • @HighCore 我同意你的建议,但是如果我们必须从网格中获取和删除某个位置的控制,该怎么做?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 2012-03-10
  • 2022-01-07
  • 1970-01-01
  • 2011-06-14
  • 2022-09-24
相关资源
最近更新 更多