2011-09-15 28 views
1

是否可以爲wpf設計器定義一些設置? 我想提供用戶2顯示模式:「繪製與邊界的一切」和「運行時查看」。 我的自定義組件應該能夠檢查設置並相應地繪製自己。WPF設計器 - 用戶自定義設置

+0

你有沒有嘗試呢?你有任何代碼嗎? –

回答

1

我有一個建議,你爲什麼不只是添加一個DependencyProperty你的自定義組件將是「DisplayMode」,並取決於開發人員放入屬性(從Xaml或C#),自定義組件將呈現你想要的方式?

public static readonly DependencyProperty DisplayModeProperty = DependencyProperty.Register(
      "DisplayMode", typeof(int), typeof(DisplayModeProperty), new PropertyMetadata(1, OnModeChanged)); 

    public bool DisplayMode 
    { 
     private get { return (bool)GetValue(DisplayModeProperty); } 
     set { SetValue(DisplayModeProperty, value); } 
    } 
    private static void OnModeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     ((MyCustomComponent)d).OnModeChanged(e); 
    } 
    private void OnModeChanged(DependencyPropertyChangedEventArgs e) 
    { 
     int mode = Convert.ToInt32(e.NewValue); 
     if(mode == 1) 
     { 
     //... Render for the Mode 1 
     } 
     else 
     { 
     //... Render for the Mode 2 
     } 

    } 

在XAML:

<cust:MyCustomCompoenent DisplayMode="1"/> 
+0

這適用於一個組件,但我想更改一個變量,它應該會影響所有組件。根據您的建議,我將此屬性添加到父組件,並且每當DisplayMode發生更改時,都將使用正確的顯示模式重繪所有子項。 它的工作原理,但我希望我不會這樣做。 – Markus

0

我認爲Strategy Pattern可以幫助你在這裏。定義一個具有公共首選項的抽象基類,並定義從其派生的多個具體類。每個具體的類將定義一些策略(也可以是override),例如邊框或無邊框,顏色,主題等,您可以在視圖中使用它們。如果您使用其運行時類型將爲具體類之一的基類引用來訪問首選項,則可以在運行時更改首選項。