【问题标题】:How to link two usercontrols? WPF如何链接两个用户控件? WPF
【发布时间】:2021-12-19 04:10:40
【问题描述】:

我有一个主窗口,它链接到一个带有两个按钮的用户控件,具体取决于所选的一个按钮。我希望这些按钮显示另一个用户控件。下面是按钮的代码 - 第二个用户控件不显示,但第一个被隐藏。

private void Button_Click(object sender, RoutedEventArgs e)
        {
            AddNewTruckUC addNewTruckUC = new AddNewTruckUC();
            this.Visibility = Visibility.Hidden;
            addNewTruckUC.Visibility = Visibility.Visible;
        }

这些用户控件显示在主窗体的堆栈面板中。

 <StackPanel x:Name="StackPanelMain" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Stretch"/>

【问题讨论】:

  • Button_Click 事件处理程序所在的类是什么?
  • ExistingModelOrNew
  • 是主窗口后面的代码还是什么?
  • 这是类的名称,抱歉,这个类的所有功能都是一个按钮,甚至是处理程序。
  • stackpanel 代码是主窗口代码的一部分

标签: c# asp.net wpf user-controls


【解决方案1】:

实际上,您正在创建 UserControl 的实例,但没有将其设置为 StackPanelMain 或任何其他容器。

有很多方法可以实现您的意图。

一种方法是:

在您的 MainWindow 构造函数中实例化用户控件

AddNewTruckUC addNewTruckUC;
ExistingModelOrNew existingModelOrNew;
Public MainWindow()
{
    addNewTruckUC = new AddNewTruckUC();
    existingModelOrNew = new ExistingModelOrNew()
}

按钮应该在 MainWindow 类中而不是在 UserControls 中,因为 MainWindow 具有 StackPanelMain 对象。

private void ButtonShowAddNew(object sender,RoutedEventArgs e)
{
    StackPanelMain.Children.Add(addNewTruckUC);
    StackPanelMain.Children.Remove(existingModelOrNew);
}

private void ButtonShowExisting(object sender,RoutedEventArgs e)
{
    StackPanelMain.Children.Add(existingModelOrNew);
    StackPanelMain.Children.Remove(addNewTruckUC);
}

这可能不是您的逻辑的确切场景,但这说明了问题。

实例化用户控件不会在任何地方显示它。您必须手动将其添加到预期的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多