【问题标题】:WPF Load Control questionWPF 负载控制问题
【发布时间】:2009-07-22 11:49:52
【问题描述】:

我正在 WPF 中做一些事情。

我有一个ComboBox,其中包含许多类型。选择具体类型后,我希望能够加载特定的用户控件(带有许多文本框等),尊重我的 WPF 窗口上定义区域中的类型。

如何做到这一点?有没有类似的 LoadControl() 并将其加载到 ASP.NET 中的 PlaceHolder 中?最好的方法是什么?

谢谢。

【问题讨论】:

    标签: wpf load user-controls


    【解决方案1】:

    您应该为每种类型创建一个DataTemplate。请参阅Different item template for each item in a WPF List 了解更多信息。

    【讨论】:

    • 好吧,我可以定义许多 DataTemplate 并使用选择器决定要显示哪个模板的项目。谢谢!
    • 但是还有一个问题。该 ComboBox 直接位于模板中,因为它是该项目的一部分。这意味着在添加时,您从该组合框中选择一个项目,该项目将自身更改为另一个 DataTemplate。但我想保留那个 ComboBox 的状态。但是在加载一个新的 DataTemplate 之后它会丢失。有什么想法吗?
    • ComboBox 是 DataTemplate 的一部分看起来很奇怪。您在问题中说 UserControl 将显示在窗口的“定义区域”中。您应该在该已定义区域的资源中为每种类型定义不同的模板。此外,您不必“加载”任何 UserControl,它会自动为您完成。如果有什么我没有得到的,请提供一些代码来更好地说明您的问题。
    • 嗯,我想把 ComboBox 放在里面,这样每个项目的用户都可以动态地改变它的类型。结果将是这个具体的项目改变了类型。
    • 好的,我不会把ComboBox放在DataTemplate里面。。有点废话。然后,一切都清楚了。谢谢!
    【解决方案2】:

    怎么样:

    object o = Activator.CreateInstance(type); 
    myUserControl.PubliclyExposedContainer.Content = o;
    

    不太清楚为什么要为每种类型都创建一个 DataTemplate。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      相关资源
      最近更新 更多