以编程方式将WPF样式设置为基线样式
本文关键字:样式 设置 基线 WPF 编程 方式 | 更新日期: 2023-09-27 18:06:10
我有一个WPF项目,我正在ViewModel中以编程方式动态设置某些元素的样式。
我定义我的样式属性如下:
private static Style okTextStyle = Application.Current.FindResource("SimpleTextBox") as Style;
private static Style errorTextStyle = Application.Current.FindResource("SimpleTextBoxError") as Style;
private Style keyTypeValueMeaningStyle = okTextStyle;
public Style KeyTypeValueMeaningStyle
{
get { return keyTypeValueMeaningStyle; }
set
{
keyTypeValueMeaningStyle = value;
OnPropertyChanged(new PropertyChangedEventArgs("KeyTypeValueMeaningStyle"));
}
}
// ...later in the code...
if (error)
{
...
KeyTypeValueMeaningStyle = errorTextStyle;
}
else
{
...
KeyTypeValueMeaningStyle = okTextStyle;
}
在我的XAML中这样使用它:
Style="{Binding KeyTypeValueMeaningStyle, UpdateSourceTrigger=PropertyChanged}"
这一切都很好;然而,我正在尝试进行更多的精简,而不是在我的ResourceDictionary中将okTextStyle
设置为命名样式,我只是希望它设置为在我的ResourceDictionary中定义的基本TextBox
样式,但我不知道这是否可能。
我尝试过设置为null或空白,但它不起作用。
private static Style okTextStyle = null As Style;
我也尝试过在else
块中做类似的事情,但也不起作用。我猜,因为在我的XAML中,我总是定义一个样式,所以它需要一个有效的样式引用,而不仅仅是null或空白值。
诚然,这是第一世界的编程问题,因为一切都很好。但是SimpleTextBox
的定义在这一点上只是基线样式的复制,如果可能的话,我正在尝试简化一点,并且没有重复的样式。这能做到吗?
Application.Current.FindResource(typeof(TextBox));
如果你想更挑剔一点,看看FrameworkElement.DefaultStyleKey
。
也就是说,这不是视图模型应该负责的事情。
顺便说一下,null As Style
返回与null
完全相同的null
,而不进行强制转换。如果我在C#团队,我会让编译器在那一行给你一个Otiose Cast警告。这并不是我永远不会加入C#团队的唯一原因,但这是一个很好的起点。