2013-03-07 119 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

相关问题