【问题标题】:WPF setting Brush from ResourceDictionary to a property in a ViewModelWPF将ResourceDictionary中的Brush设置为ViewModel中的属性
【发布时间】:2018-03-21 14:32:50
【问题描述】:

我正在制作一个带有按钮的视图,我想在点击时更改它们的颜色。 我希望按钮具有默认颜色,并在第一次单击时将其颜色更改为另一种颜色。

为了做到这一点,我想保持它干净,所以我将画笔保存在资源字典中。

<ResourceDictionary 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

     <SolidColorBrush x:Key="WeekCalendarDefaultCellColor" Color="#FFE5CC"/>
     <SolidColorBrush x:Key="WeekCalendarClickCellColor" Color="#FFFF00"/>

</ResourceDictionary>

对于 MVVM,我将按钮画笔绑定到一个属性(如果我自己设置颜色,则绑定有效,但我想在整个应用程序中使用相同的颜色,所以我认为最好从字典中获取)

public SolidColorBrush CurrentBrush =//????;

现在我想将字典中的画笔插入到这个属性中,如何从字典中获取画笔到视图模型?

提前感谢所有帮助者!

【问题讨论】:

标签: c# wpf mvvm viewmodel resourcedictionary


【解决方案1】:

如果您在后面的代码中使用此代码,它将起作用:

button.Background = (Brush)FindResource("ButtonNormalBackgroundBrush");

但是!你是说你想让它干净。

对于 MVVM,我将按钮画笔绑定到一个属性

您不应将按钮画笔绑定到 VM 属性。刷子是 GUI(在 MVVM 中查看)部分。 VM 应该包含某种状态,例如 bool 或 enum 等。您可以以按钮样式读取此状态并使用触发器来更改背景。

【讨论】:

  • 为什么要使用代码隐藏? Background="{StaticResource ButtonNormalBackgroundBrush}"
  • 是的,你是对的。他只是在询问有关访问 VM 中的 ResourceDictionary 以解决他的问题。我只是想指出这在 CodeBehind 中很容易实现,但正如我所说,这仍然不是足够好的解决方案。在这种情况下,绑定与触发器,而不是,正如您所指出的,静态资源。
猜你喜欢
  • 2010-11-03
  • 2013-02-23
  • 1970-01-01
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 2013-12-05
  • 1970-01-01
相关资源
最近更新 更多