2017-05-08 198 views
0

我有以下樣式:設置WPF按鈕式編程方式

<Window.Resources> 
    <Style x:Key="RoundCorner" TargetType="{x:Type Button}"> 
     <Setter Property="HorizontalContentAlignment" Value="Center"/> 
     <Setter Property="VerticalContentAlignment" Value="Center"/> 
     <Setter Property="Padding" Value="1"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Button}"> 
        <Border CornerRadius="0,0,4,4" BorderBrush="black" 
    BorderThickness="1,0,1,1" > 
         <ContentPresenter HorizontalAlignment="Center" 
          VerticalAlignment="Center" 
          Margin="1"></ContentPresenter> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="LayoutTransform"> 
      <Setter.Value> 
       <RotateTransform CenterX="0.5" CenterY="0.5" Angle="270" /> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 

我將它設置爲一個按鈕,這樣

<Button x:Name="btn_bfx" ToolTip="BreakFix" Content="BFX" Click="btn_bfx_Click" Height="30" Width="40" HorizontalContentAlignment="Center" ></Button> 

在構造函數中,我設置樣式,如:

btn_bfx.Style = this.Resources["RoundCorner"] as Style; 

以後根據一些條件我想改變風格。

的代碼如下:

Style oldStyle = FindResource("RoundCorner") as Style; 
Style newStyle = new Style(); 
newStyle.BasedOn = oldStyle; 
newStyle.TargetType = typeof(Button); 
foreach (var setter in oldStyle.Setters.ToList()) 
{ 
    newStyle.Setters.Add(setter); 
} 
newStyle.Setters.Add(new Setter(BackgroundProperty, Brushes.CadetBlue)); 
btn_bfx.Style = newStyle; 

的newStyle只是添加背景顏色的舊式。但是這種新風格沒有被應用。我仍然沒有背景顏色的風格。

有人能幫我解決這個問題嗎?

+1

不是一個問題,但是如果你在XAML中定義了新的樣式,那麼編寫和讀取比在代碼後面更容易。 – kennyzx

+0

我試着先在XAML中定義樣式,然後像樣式一樣設置像這樣的btn_bfx.Style = FindResource(「RoundCornerBackground」);它也沒有工作。 –

+0

這可以在使用數據觸發器的樣式中沒有代碼的情況下完成。如果將數據觸發器綁定到表示條件變化的屬性,則使用觸發器中的設置器進行更改。 – kenjara

回答

2

您的樣式重寫了按鈕的ControlTemplate,因此不再使用背景顏色。

在控件模板,背景屬性添加到邊境這樣

<Border CornerRadius="0,0,4,4" BorderBrush="black" BorderThickness="1,0,1,1" 
    Background="{TemplateBinding Background}"> 

然後,它會使用你所設置的任何背景。

+0

謝謝。這工作:) –

0

這可以在使用數據觸發器的樣式中沒有代碼的情況下完成。如果將數據觸發器綁定到表示條件變化的屬性,則使用觸發器中的設置器進行更改。例如:

<Button> 
        <Button.Style> 
         <Style TargetType="Button"> 
          <Setter Property="Background" Value="White"></Setter> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding condition}" Value="True"> 
            <Setter Property="Background" Value="Black"></Setter> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </Button.Style> 
       </Button> 

這對我來說比你想要調整風格的方式更容易和更整齊。它將它全部保留在一個地方,而不是一半放在XAML中,一半放在代碼後面。

+0

嗨。我沒有使用MVVM,因爲它只是一個簡單的1窗口項目,它從用戶獲取一些數據並通過WEB API更新某個表。我的意圖是通過改變背景顏色,用戶將對他選擇的選項有一個視覺反饋。所以在點擊按鈕時,我試圖改變背景顏色。而已。 –

相關問題