Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何绑定SolidColorBrush';将ResourceDictionary中的颜色属性转换为ViewModel颜色属性_C#_Wpf_Mvvm_Datacontext - Fatal编程技术网

C# 如何绑定SolidColorBrush';将ResourceDictionary中的颜色属性转换为ViewModel颜色属性

C# 如何绑定SolidColorBrush';将ResourceDictionary中的颜色属性转换为ViewModel颜色属性,c#,wpf,mvvm,datacontext,C#,Wpf,Mvvm,Datacontext,我有一个wpf窗口,它使用一个ResourceDictionary,其中定义了一个SolidColorBrush 我可以使用如下十六进制值来选择设置SolidColorBrush的颜色,就像设置颜色属性一样: 当我尝试这样设置时: 它显然不起作用,因为ResourceDictionary没有要设置的DataContext 我尝试这样做是因为我认为绑定可能会使用在使用SolidColorBrush的控件上设置的任何DataContext,但这似乎不起作用 所以我想知道如果我不能设置Reso

我有一个wpf
窗口
,它使用一个
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}"/>