2016-11-13 128 views
-1

我想爲我的WPF應用程序中的按鈕創建自定義樣式。當鼠標懸停在它們上面時,我希望能夠更改它們的BackgrooundBorderThickness屬性。以編程方式WPF更改按鈕懸停樣式

一些按鈕是在c#中動態創建的,所以我不認爲xaml解決方案就足夠了。

我試過在c#中使用觸發器和安裝程序來實現我的目標,但是我無法使它工作,懸停顏色始終保持淺藍色。

這裏是我是如何創建一個按鈕:

Button but = new Button() 
{ 
Height = 40, 
Background = new SolidColorBrush(Colors.Gray), 
Content = new Label() { 
    FontSize = 13, 
    FontWeight = FontWeights.Medium, 
    Foreground = new SolidColorBrush(Colors.White) 
    } 
} 
stackPanel.Children.Add(but) 

我知道這是不是創建控件的最佳途徑,我可能會更好使用MVVM,但我不能改變整個應用程序所以我只是在尋找ac#解決方案。

謝謝!

編輯:

我添加了一個風格App.xaml文件。它看起來像這樣(UpperMenuModeButton是基於常規按鈕我的控制):

<Application.Resources> 
    <Style TargetType="UpperMenuModeButton" x:Key="UpperMenuModeButton" > 
     <Style.Triggers> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="Background" Value="Red"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Application.Resources> 

我設置的風格,同時創造這樣的按鈕:

this.Style = (Style) Resources["UpperMenuModeButton"]; 

我仍然得到規則淡藍色背景徘徊。

+0

用鼠標懸停觸發器在xaml中創建一個通用樣式,並在您的代碼中應用[樣式](http://stackoverflow.com/questions/10686917/setting-the-style-property-of-a-wpf-label -in-code) –

+0

@MathewJibin謝謝你的回答!你能否提供更多關於如何創建通用樣式的信息,以便我可以將它應用到不同窗口中的按鈕上? –

+0

或者只是創建一個樣式來實現特定類型的所有元素,如按鈕 – Emad

回答

1

您可以創建一個通用的風格是這樣的:

<Style TargetType="Button"> 
    <Setter Property="HorizontalAlignment" Value="Center" /> 
    <Setter Property="FontFamily" Value="Comic Sans MS"/> 
    <Setter Property="FontSize" Value="14"/> 
<EventTrigger RoutedEvent="Mouse.MouseEnter"> 
    <EventTrigger.Actions> 
    <BeginStoryboard> 
     <Storyboard> 
     <DoubleAnimation 
      Duration="0:0:0.2" 
      Storyboard.TargetProperty="MaxHeight" 
      To="90" /> 
     </Storyboard> 
    </BeginStoryboard> 
    </EventTrigger.Actions> 
</EventTrigger> 
<EventTrigger RoutedEvent="Mouse.MouseLeave"> 
    <EventTrigger.Actions> 
    <BeginStoryboard> 
     <Storyboard> 
     <DoubleAnimation 
      Duration="0:0:1" 
      Storyboard.TargetProperty="MaxHeight" /> 
     </Storyboard> 
    </BeginStoryboard> 
    </EventTrigger.Actions> 
</EventTrigger> 
</Style> 

將這個代碼在按鈕的範圍(在它的頁面或網格或容器),它會自動工作。 欲瞭解更多信息請參閱here

編輯

您的問題關於按鈕懸停事件看here

+0

來自第二個鏈接的代碼適用於我,但我有點困惑。在我刪除 ...後,我的觸發器不會觸發。在開始時,我的按鈕顏色變成綠色,但是當我將鼠標懸停在它上面時,它會更改爲默認淡藍色。在 ...中有什麼重要? –

+0

@MarcinBator該按鈕在Windows中有一個默認模板。因此,窗口中的所有按鈕看起來都是一樣的。它可能會在未來的Windows版本中發生變化,從而幫助您的應用程序看起來與新應用程序相同。您需要的是將此模板更改爲您認爲更好的模板。這就是這個代碼所做的。 – Emad

0

對於風格上的一個普通按鈕,你需要設置的TargetType到按鈕的工作。否則它不會被應用。希望這可以幫助。

+0

我搞砸了一點點。在我的問題的第一部分中,我提到了創建按鈕,但我的意思是創建從Button派生的自定義UpperMenuModeButton按鈕。 –