【问题标题】:Create multiple instances of the same control with different visual properties via code-behind in WPF通过 WPF 中的代码隐藏创建具有不同视觉属性的同一控件的多个实例
【发布时间】:2012-02-29 03:13:35
【问题描述】:

我正在尝试制作 GUI 原型并使用 Expression Blend 4 创建了一个最小的 WPF 项目。

我有一个主窗口(XAML+codebehind),其中有八个单独定义的 UserControl 实例(XAML+codebehind)。这个用户控件有一些容器和形状,我希望它的每个实例在主窗口中都有不同的外观。

我们的想法是公开此控件的一些属性,并将它们视为参数。然后,我可以使用后面的代码来填充主窗口,并且可以为每个实例添加一些硬编码的参数化。以伪代码为例:

first = new mycontrol;
mainwindow.maincontanier.add(first);
first.leftpanel.width = 100;
first.rightpanel.background = Gray;

second = new mycontrol;
mainwindow.maincontainer.add(second);
second.leftpanel.smalldot.stroke = Red;
second.leftpanel.insideborder.thickness = 2;

etc.

问题是:我不知道这通常是如何完成的,所以我很感激任何建议,特别是最小工作代码块的形式。

请记住,我这样做只是为了进行设计研究,因此我可以比较控件的不同可能视觉状态。我不是 C# 程序员,不涉及任何其他 GUI 功能。

【问题讨论】:

    标签: c# wpf wpf-controls code-behind


    【解决方案1】:

    如果您询问如何以编程方式添加项目:

    //get mainwindow
    Window main = App.Current.MainWindow;
    myControl c1 = new myControl();
    //change properties
    myControl c2 = new myControl();
    //change properties
    
    //choose a container you want
    StackPanel s = new StackPanel();
    
    //add objects to container
    s.Children.Add(c1);
    s.Children.Add(c2);
    
    //make container as your main content
    main.Content = s;
    

    【讨论】:

    • 我会尝试使用它,但是我应该在哪里写这个代码呢?在 MainWindow.cs 中?还是其他文件?
    • 最好写在Loaded事件里。在 MainWindos.cs 中,在 InitializeComponent(); 之后行,输入: "this.Loaded +=" ,然后按 "tab" 2 次。它将创建一个方法。用那个方法写你的代码。
    • 成功了。现在我要向@NestorArturo 提出关于如何公开用户控件的属性并填写change properties 部分的建议。
    • 您可以使用数据绑定功能。这是一个视频:youtube.com/watch?v=Bq2O5x7AdPc
    【解决方案2】:

    首先,您需要了解一些 C# 才能做到这一点。其次,您的控件可以公开映射到您的内部外观属性的属性,因此当用户更改它们时,您可以更改控件内部的等价物。

    【讨论】:

      猜你喜欢
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 2014-03-21
      • 2015-09-05
      相关资源
      最近更新 更多