2016-01-22 155 views
-1

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

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

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(); 
} 
+1

只要阅读文档https://msdn.microsoft.com/en-us/library/ms752914(v=vs.100).aspx – chameleon86

回答

2

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

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

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 
} 
+0

@Clemens:固定,THX –

+0

不知道什么应该是错的。你能解释一下吗? –

+0

阅读[文档](https://msdn.microsoft.com/en-us/library/ms597500(v = vs.100).aspx):“* ownerType *:注册依赖项属性的所有者类型。 “ – Clemens