2017-10-11 45 views
3

我有一個按鈕,在模式A中有一個樣式模板。在模式A中,此按鈕具有一個PointerOver VisualState。當我處於模式B時,我使用相同的按鈕,但在模式B中,我想要使用不同的PointerOver VisualState。是否有可能爲一個元素有兩個樣式模板並決定在代碼後面使用哪一個?

什麼是利用視覺狀態來完成類似事情的最佳方式?我想爲同一個按鈕有兩個不同的樣式模板,並以某種方式更改在代碼後面使用哪種樣式模板,但不確定這是否可能,或者如果這是解決此問題的最佳方法。

有什麼建議嗎?

+0

我認爲這很容易做到。 – lindexi

+0

使用模板和樣式 –

回答

2

在後面的代碼試試這個:

[control name].Style = this.FindResource("[style key]") as Style; 

而且你不應該叫樣式「樣式模板」,因爲它可以我誤解了。樣式和模板是兩個不同的東西。

  • 模板定義了給定的控件是如何構建的。例如,如果使用BorderTextBlock(或使用其他控件)構建Button
  • 樣式定義了一組屬性,用於描述給定控件的外觀(模板是其中一個屬性)。
0

另一種選擇是使用Converter來決定哪些StyleButton應該的。

轉換器:

public class ButtonStyleConverter : IValueConverter { 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
    var mode = (int)value; 
    return mode == 1 ? Application.Current.Resources["ButtonStyle1"] as Style : Application.Current.Resources["ButtonStyle2"] as Style; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
    //Do nothing 
    } 
} 

用法:

<Button Content="Hello" Style="{Binding Button1Mode, Converter={StaticResource ButtonStyleConverter}}"/> 
<Button Content="World" Style="{Binding Button2Mode, Converter={StaticResource ButtonStyleConverter}}" /> 

我用Binding在我的視圖模型,一個屬性,它在理論上將允許你修改的「模式」按鈕在運行時取決於數據。如果你需要更多的代碼,我很樂意在Github上發佈一個例子。

相關問題