2010-10-28 65 views
2

我旁边dependecy属性更改非静态对象静态上下文中的非静态按钮(btnSearch等)。从静态上下文

我希望在属性值更改时更改按钮的可见性。我该如何解决这种情况?

+0

为什么'ReadModeChanged'是静态的? – 2010-10-28 07:45:30

+0

denepdency属性必须始终是静态的吗? PropertyMetadata类需要静态属性更改方法 – Polaris 2010-10-28 07:58:26

+0

什么对象具有此属性? – 2010-10-28 09:35:44

回答

6

由于(非附件)DependencyProperties被限制在其所有者类型设定你可以创建一个实例方法来保存你的逻辑和铸造调用从静态方法的DependencyObject:

public static readonly DependencyProperty IsInReadModeProperty = DependencyProperty.Register(
    "IsInReadMode", 
    typeof(bool), 
    typeof(RegCardSearchForm), 
    new UIPropertyMetadata(false, ReadModeChanged)); 

private static void ReadModeChanged(DependencyObject dObj, DependencyPropertyChangedEventArgs e) 
{ 
    RegCardSearchForm form = dObj as RegCardSearchForm; 
    if (form != null) 
     form.ReadModeChanged((bool)e.OldValue, (bool)e.NewValue); 
} 

protected virtual void ReadModeChanged(bool oldValue, bool newValue) 
{ 
    // TODO: Add your instance logic. 
} 
0

如果ReadModeChanged是您的按钮的容器的静态方法,那么只需使它成为容器的实例方法。

1

一种方法是从DependencyObject扩展一个类,该类将包含要操纵的控件的设置/获取。并通过访问DependencyObjectReadModeChanged事件中处理它。

This example可能会有所帮助。

...示例派生自DependencyObject以创建一个新的抽象类。然后,该课程将注册一个附属财产,并包括支持成员

0

这些东西必须是静态的才能使DependencyProperty正常工作但是,您的PropertyChanged处理程序的参数可能是您需要的东西:它是属性刚更改的实例。我怀疑这会适用于你:

public static void ReadModeChanged(DependencyObject d, 
    DependencyPropertyChangedEventArgs e) 
{ 
    if ((bool)e.NewValue) 
    { 
     RegCardSearchForm c = (RegCardSearchForm)d; 
     c.btnSearch.Visibility = Visibility.Collapsed; 
     c.btnExport.Visibility = Visibility.Collapsed; 
     c.cbExportWay.Visibility = Visibility.Collapsed; 
    } 
} 
相关问题