簡體   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