【问题标题】:WPF bool dependency property C#WPF bool 依赖属性 C#
【发布时间】:2016-01-23 17:26:23
【问题描述】:

如何创建一个简单的布尔依赖属性IsInput。该值只能在代码中创建类时设置为truefalse。看起来很简单,但我在网上搜索并没有找到一个明确的例子。

我在网上看到过这样的例子,但我不太清楚我会复制什么来正确创建我自己的 bool 依赖属性。

public static readonly DependencyProperty AncestorProperty =
    DependencyProperty.Register("Ancestor", typeof(FrameworkElement), typeof(MyItem),
        new FrameworkPropertyMetadata(Ancestor_PropertyChanged));

/// <summary>
/// Event raised when 'Ancestor' property has changed.
/// </summary>
private static void Ancestor_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    MyItem c = (MyItem)d;
    c.UpdateHotspot();
}

【问题讨论】:

标签: c# wpf


【解决方案1】:

Register方法的第二个参数是属性的类型,即bool,而第三个参数是所谓的所有者类型,也就是声明属性的类型( MyControl 在下面的示例中)。

对于完整的依赖属性声明,您还需要使用调用依赖属性的 GetValueSetValue 方法的 getter 和 setter 声明“包装器”属性。

public static readonly DependencyProperty IsInputProperty =
    DependencyProperty.Register("IsInput", typeof(bool), typeof(MyControl),
        new FrameworkPropertyMetadata(IsInputPropertyChanged));

/// <summary>
/// CLR wrapper for the 'IsInput' dependency property.
/// </summary>
public bool IsInput
{
    get { return (bool)GetValue(IsInputProperty); }
    set { SetValue(IsInputProperty, value); }
}

/// <summary>
/// Callback called when 'IsInput' property has changed.
/// </summary>
private static void IsInputPropertyChanged(
    DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    bool b = (bool)e.NewValue;
    //TODO
}

【讨论】:

  • 不知道哪里出了问题。你能解释一下吗?
  • 阅读documentation:“ownerType:正在注册依赖属性的所有者类型。”
  • 看看WPF Dependency Properties: Why do I need to specify an Owner Type?,使用实际所有者Type而不是其他类几乎总是正确的。
  • @Lukazoid 实际上,使用任何其他类型都是不正确的。除此之外,没有理由这样做。如果您声明的属性与应用该属性的类型不同,请使用附加属性。
  • @Clemens 没错,我会使用附加属性。我认为我的链接上接受和赞成的答案是正确的,只是我从未使用过的东西。
猜你喜欢
  • 2014-05-23
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 2011-03-28
  • 2012-11-08
相关资源
最近更新 更多