2012-04-10 104 views
0

我對WPF相當陌生,並且創建了一個樣式來改變按鈕控件的外觀。該樣式包含基於數據上下文的布爾屬性,例如數據觸發更改按鈕背景(除其他事項外): -在應用程序級樣式資源中指定綁定?

<Style x:Key="IndicatorButton" TargetType="Button"> 
    <DataTrigger Binding="{Binding Path=ValveIsOpen}" Value="True"> 
     <Setter Property="Background" Value="#00FF00"/> 
     ..etc.. 

目前的風格只由一個按鈕,所以數據觸發器綁定使用名爲「ValveIsOpen」的屬性進行硬編碼。 我現在想要在整個應用中重新使用這種風格,並將不同的按鈕綁定到不同的屬性。我將如何更改樣式應用於每個按鈕上的數據觸發器綁定?

非常感謝

回答

1

您需要定義一個基本樣式和衍生風格,如

<Style x:Key="IndicatorButton" TargetType="Button"> 
    <Setter Property="Foreground" .../> 
    ... 

<Style x:Key="ValveIndicatorButton" TargetType="Button" BasedOn={StaticResource IndicatorButton}> 
    <DataTrigger Binding="{Binding Path=ValveIsOpen}" Value="True"> 
     <Setter Property="Background" Value="#00FF00"/> 
     ..etc.. 
+0

有可能是很多在窗口上這些按鈕。用用戶控件而不是樣式完成我想要的是否可行?如果是這樣,我將如何通過用戶控件上的屬性公開/設置數據觸發器的綁定表達式?還是我吠叫錯了樹? – 2012-04-10 15:34:23

+0

您可以使用兩個依賴屬性創建一個從Button派生的自定義控件,比如'bool IsActive'和'SolidColorBrush IsActiveColor'。然後綁定等。當IsActive更改時,您將更新依賴項屬性更改處理程序中的BackgroundColor。 – Phil 2012-04-10 15:58:56

+0

或者您可以在您的視圖模型上公開一個ValveIsOpenColor,並將Background綁定到該模型上。 – Phil 2012-04-10 16:07:01