2010-10-28 63 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; 
    } 
} 
相關問題