我正在构建一个WPF应用程序,该应用程序将在安装在警车上的笔记本电脑上运行。该应用程序必须具有“夜间模式”,使用较暗的颜色,以减少夜间眼睛的压力。
由于应用程序将在驾驶员驾驶时使用,因此我增加了所有控件的大小,并为组合框等内容定义了新的默认模板。这是为了让屏幕更容易一目了然,并且当你有香肠手指时更容易在触摸屏上点击控件,就像我一样。
我创建了一个名为TimesOfDay
的枚举。枚举中有两个值DayTime
和NightTime
。每个控件都有一个名为TimeOfDay
枚举类型的TimesOfDay
的DepenencyProperty。主屏幕上有一个按钮,您可以按此按钮更改TimeOfDay
属性的值。单击该按钮时,它会在两个值之间循环TimeOfDay
属性的值。
我还是WPF的新手,所以我不确定如何在Xaml方面解决这个问题。我认为我需要做的是创建两个命名样式,例如一个名为DayStyle,另一个名为NightStyle。然后我需要在某处添加触发器,以便在TimeOfDay
属性更改时更改应用于控件的样式。是吗?
我只是按类型更改控件的背景颜色和前景色吗?我可以按元素名称来做吗?
我对这一切都非常模糊。任何帮助将不胜感激。
贝
答案 0 :(得分:1)
每个控件都有一个名为TimeDay枚举类型的TimeOfDay的DepenencyProperty。
不要这样做,只需在单独的ResourceDictionaries
中创建两个完整的主题,然后通过MergedDictionaries
中的Application.Resources
{{1}}。没有必要将日间信息放在控件上。
答案 1 :(得分:0)
请遵循以下指南:http://weblogs.asp.net/psheriff/archive/2009/12/01/load-resource-dictionaries-at-runtime-in-wpf.aspx
DynamicResource
s。基本上,您希望“涂抹”您的应用程序。加载到资源文件中的代码可以利用TimeOfDay
枚举。
如果您希望它自动化,您甚至可以使用一些具有计时器的静态类来自动尝试更改资源并在应用程序启动时设置计时器。 :)
答案 2 :(得分:0)
我不会复制样式,因为我讨厌重复的代码......你可以通过ControlTemplate
中的触发器轻松实现这一点:
<Trigger Property="TimeOfDay" Value="NightTime">
<Setter TargetName="someControl" Property="Background" Value="Black" />
<Setter TargetName="someOtherControl" Property="ForeGround" Value="Yellow" />
...
</Trigger>
另一种选择是使用我描述的技术here。这样您甚至不需要将TimeOfDay
信息放在控件本身上,它可以是环境属性。