繁体   English   中英

以编程方式将WPF样式设置为基准样式

[英]Programmatically setting WPF style to baseline style

我有一个WPF项目,在其中我以编程方式在ViewModel中动态设置某些元素的样式。

我正在定义我的Style属性,如下所示:

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}"

一切都很好。 但是,我正在尝试简化一些方法,而不是将okTextStyle设置为ResourceDictionary中的命名样式,我只是希望将其设置为ResourceDictionary中定义的基本TextBox样式,但是我不知道这是否可行。

我尝试设置为null或诸如此类的空白,但是它不起作用。

private static Style okTextStyle = null As Style;

我也尝试在我的else块中做类似的事情,但这也不起作用。 我猜想因为在我的XAML中我总是在定义一个样式,所以它需要一个有效的样式引用,而不仅仅是空值或空白值。

诚然,这是第一世界编程问题,因为一切都很好。 但是,此时SimpleTextBox定义只是基准样式的重复,如果可能的话,我正在尝试简化一些样式,并且不使用重复的样式。 能做到吗?

Application.Current.FindResource(typeof(TextBox));

如果您想让自己更坚强一些,请查看FrameworkElement.DefaultStyleKey

也就是说,这不是视图模型应负责的事情。

顺便说一句, null As Style返回与不进行强制转换的null完全相同的null 如果我在C#团队中,我希望编译器在该行上给您一个Otiose Cast警告。 这不是我永远不会加入C#团队的唯一原因,但这是一个很好的起点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM