我想向 UserControl 添加一个依赖属性,该属性可以包含一组 UIElement 对象。您可能会建议我应该从 Panel 派生我的控制权,并为此使用 Children 属性,但在我的情况下,这不是一个合适的解决方案。

我已经像这样修改了我的 UserControl:

public partial class SilverlightControl1 : UserControl {

  public static readonly DependencyProperty ControlsProperty
    = DependencyProperty.Register(
      "Controls",
      typeof(UIElementCollection),
      typeof(SilverlightControl1),
      null
    );

  public UIElementCollection Controls {
    get {
      return (UIElementCollection) GetValue(ControlsProperty);
    }
    set {
      SetValue(ControlsProperty, value);
    }
  }

}

我是这样使用它的:
<local:SilverlightControl1>
  <local:SilverlightControl1.Controls>
    <Button Content="A"/>
    <Button Content="B"/>
  </local:SilverlightControl1.Controls>
</local:SilverlightControl1>

不幸的是,当我运行应用程序时出现以下错误:
Object of type 'System.Windows.Controls.Button' cannot be converted to type
'System.Windows.Controls.UIElementCollection'.

Setting a Property by Using a Collection Syntax 部分明确指出:



我能做些什么来解决我的问题?解决方案是否只是使用另一个集合类而不是 UIElementCollection ?如果是,推荐使用的集合类是什么?

最佳答案

我将我的属性类型从 UIElementCollection 更改为 Collection<UIElement> ,这似乎解决了问题:

public partial class SilverlightControl1 : UserControl {

  public static readonly DependencyProperty ControlsProperty
    = DependencyProperty.Register(
      "Controls",
      typeof(Collection<UIElement>),
      typeof(SilverlightControl1),
      new PropertyMetadata(new Collection<UIElement>())
    );

  public Collection<UIElement> Controls {
    get {
      return (Collection<UIElement>) GetValue(ControlsProperty);
    }
  }

}

在 WPF 中,UIElementCollection 具有一些导航逻辑树和可视树的功能,但在 Silverlight 中似乎没有。在 Silverlight 中使用另一种集合类型似乎没有任何问题。

关于c# - 在 Silverlight 中添加 UIElementCollection DependencyProperty,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1299463/

10-13 06:20