2011-09-18 62 views
0

根據類中某個屬性的值,是否可以隱藏/顯示一個Adorner?使用屬性控制裝飾者的可見性?

我應該爲此使用附加屬性嗎?

如果是這樣,Adorner的可見度究竟如何控制;是否必須手動刪除它/將它添加到Dependency Object的OnChanged事件中的Adorner Layer?

這只是我想要做一個非常快速的代碼表示:

注意:我甚至不知道它做事的正確方法我想裝飾器的知名度。由我的業務模型中的代碼修改的屬性的值來控制。附加屬性的問題是控件的責任是更新屬性的值而不是業務域中的代碼。)

public static class IsValidBehavior 
{ 
    public static readonly DependencyProperty IsValidProperty = DependencyProperty.RegisterAttached("IsValid", 
                    typeof(bool), 
                    typeof(IsValidBehavior), 
                    new UIPropertyMetadata(false, OnIsValidChanged)); 

    public static bool GetIsValid(DependencyObject obj) 
    { 
     return (bool)obj.GetValue(IsValidProperty); 
    } 
    public static void SetIsValid(DependencyObject obj, bool value) 
    { 
     obj.SetValue(IsValidProperty, value); 
    } 

    private static void OnIsValidChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e) 
    { 
     UIElement element = dependencyObject as UIElement; 

     if (element == null) 
      return; 

     if ((bool)e.NewValue == true) 
     { 
      // Display the Adorner 
     } 
     else 
     { 
      // Hide the Adorner 
     } 
    } 
} 
+0

可以提供一些代碼嗎? – Tigran

+0

在帖子中添加了一個快速代碼示例。我只是想出了它,但它應該給出我想要做的事情的一個概念。 –

回答

3

好吧,如果我理解你的問題,在WPF你有兩種方法可以做到這一點,從代碼或從XAML。從代碼,你或多或少的已經做了,在XAML中,你可以做這樣的事情,我想:

Visibility="{Binding Path=MyVisibilityVariant, 
     Converter={StaticResource VisibilityConverter}} 

換句話說綁定到一些財產。我一般建議:無論何時,你可以考慮幾個變量的使用XAML:

  • XAML聲明使得軟件非常scallable,但也更復雜(考慮你,或你的團體cappabilities,不知何故做的東西在後面的代碼是最好的,如果不僅解決方案可用)

  • 考慮你截止日期,導致XAML的東西實施/調試/修復你將花費更多的時間,然後在代碼上。

編輯

Defining custom Adorder in order to be able to define it in XAML

+0

但是我可以綁定XAML中的裝飾者的可見性..?一個裝飾者甚至可以用XAML來設計..?我的印象是,我們只能在代碼中創建/分配裝飾者? –

+1

@侯賽因:當然可以,但你需要定義一個自定義類型。最後,Adorner是FrameworkElement,您可以擴展它以便爲您的裝飾者用戶提供XAML支持。看看我編輯過的帖子。 – Tigran

+0

謝謝,我會看看鏈接並回報。據我所知,我甚至不需要使用附加屬性。 –