C# 如何绑定SolidColorBrush';将ResourceDictionary中的颜色属性转换为ViewModel颜色属性
我有一个wpfC# 如何绑定SolidColorBrush';将ResourceDictionary中的颜色属性转换为ViewModel颜色属性,c#,wpf,mvvm,datacontext,C#,Wpf,Mvvm,Datacontext,我有一个wpf窗口,它使用一个ResourceDictionary,其中定义了一个SolidColorBrush 我可以使用如下十六进制值来选择设置SolidColorBrush的颜色,就像设置颜色属性一样: 当我尝试这样设置时: 它显然不起作用,因为ResourceDictionary没有要设置的DataContext 我尝试这样做是因为我认为绑定可能会使用在使用SolidColorBrush的控件上设置的任何DataContext,但这似乎不起作用 所以我想知道如果我不能设置Reso
窗口
,它使用一个ResourceDictionary
,其中定义了一个SolidColorBrush
我可以使用如下十六进制值来选择设置SolidColorBrush的颜色,就像设置颜色属性一样:
当我尝试这样设置时:
它显然不起作用,因为ResourceDictionary
没有要设置的DataContext
我尝试这样做是因为我认为绑定可能会使用在使用SolidColorBrush
的控件上设置的任何DataContext
,但这似乎不起作用
所以我想知道如果我不能设置ResourceDictionary
的DataContext
,我应该如何从ViewModel
获取Color
,一个可能的解决方案是将ViewModel对象放入ResourceDictionary并显式设置绑定的:
<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>
是否只在ResourceDictionary中使用它?是否正在尝试实现蒙皮?颜色/画笔通常是视图特定的东西,不一定由ViewModel控制。ViewModel可以定义一个标志,视图使用该标志来确定使用哪种笔刷,如果有一组固定的选项。你能让你的ViewModel显示一个画笔而不是颜色
,并让元素直接绑定到ViewModel上的属性吗?我刚刚用一个合并到窗口资源中的外部资源字典测试了这一点,它对我很有用。也许你可以发布更多的代码。我最终使用了你说的。我以前从未使用过绑定的源参数,所以感谢您指出这一点。
<Rectangle Fill="{Binding UserSelectedBrush}"/>