2013-03-07 65 views
1

我有一個wpf Window,它使用的ResourceDictionary中定義的SolidColorBrush已定義。如何將ResourceDictionary中的SolidColorBrush的Color屬性綁定到ViewModel Color屬性

我可以選擇什麼顏色設置SolidColorBrush與它的顏色屬性,通過使用像這樣的十六進制值:

<SolidColorBrush Color="#FF0000"/> 

當我嘗試設置這樣的:

<SolidColorBrush Color="{Binding UserSelectedColor}"/> 

這顯然不起作用,因爲ResourceDictionary沒有設置DataContext

我試圖這樣做,因爲我認爲綁定可能會使用DataContext在使用SolidColorBrushControl上設置,但這似乎不起作用。

所以我不知道我怎麼從ViewModel得到Color如果我不能設置的ResourceDictionary

+0

你想只在ResourceDictionary中嗎? – ethicallogics 2013-03-07 18:24:44

+0

您是否試圖實施剝皮?顏色/畫筆通常是特定於視圖的事物,不一定由ViewModel控制。如果有一組固定的選擇,ViewModel可以定義一個標誌,View用來決定使用哪一個畫筆。 – 2013-03-07 18:35:37

+0

你可以讓你的ViewModel暴露一個'Brush'而不是'Color',並讓元素直接綁定到ViewModel上的屬性? – 2013-03-07 18:43:55

回答

3

一個可能的解決辦法是也把視圖模型對象到資源字典的DataContext和明確設置綁定的Source

<Window ...> 
    <Window.Resources> 
     <local:ViewModel x:Key="ViewModel"/> 
     <SolidColorBrush x:Key="UserSelectedBrush" 
      Color="{Binding UserSelectedColor, Source={StaticResource ViewModel}}"/> 
    </Window.Resources> 
    <Grid DataContext="{StaticResource ViewModel}"> 
     <Rectangle Fill="{StaticResource UserSelectedBrush}"/> 
    </Grid> 
</Window> 

這將然而更容易聲明類型的UserSelectedBrush財產在ViewModel中,並直接綁定到該屬性:

<Rectangle Fill="{Binding UserSelectedBrush}"/> 
+0

我結束了你說的話。我從來沒有使用過綁定的Source參數,所以謝謝你指出。 – Zack 2013-03-07 18:58:00

相關問題