2017-06-01 41 views
0

WPF的新手,來自Web背景。MouseOver風格的觸發器不會更改背景

我的風格觸發器不會更改按鈕背景。風格XAML:

<Window.Resources> 
    <Style TargetType="Button"> 
     <Setter Property="Background" Value="GhostWhite" /> 
     <Style.Triggers> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="Background" Value="#F48230"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

按鈕XAML(沒有相關的窗口或表格屬性):

<Window...> 
    <Grid...> 
     <StackPanel Orientation="Horizontal" Grid.Row="7" Grid.Column="0" Grid.ColumnSpan="2" VerticalAlignment="Center" HorizontalAlignment="Center"> 
      <Button Name="btnEdit" Cursor="Hand" Content="Edit Settings..." HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Margin="0,0,5,0" Click="btnEdit_Click"/> 
      <Button Name="btnExit" Cursor="Hand" Content="Exit" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Margin="5,0,0,0" Click="btnExit_Click" /> 
     </StackPanel> 
    </Grid> 
</Window> 

的按鈕就拿起資源部分的背景風格,但不觸發 - 鼠標懸停結果默認行爲。

補充問題:有沒有辦法可以調試呢?我查看了Live Visual Tree,但無法弄清楚如何獲取我需要的信息。

+0

我猜可視狀態中按鈕樣式優先於觸發器。你可能需要重新調整它。 – sondergard

回答

0

WPF控件有一個模板控件模板的屬性。該屬性告訴WPF如何在屏幕上繪製控件。 WPF Button在其ControlTemplate中使用Windows Chrome,它使用用戶選擇的系統顏色來實現不同應用程序之間的一致性。利用WPF和XAML的魔力,您可以創建自己的ControlTemplate,讓按鈕看起來合適。

一鍵創建樣式,所以你可以選擇按鈕使用該模板:

<Window.Resources> 
    <Style x:Key="MyButtonStyle" TargetType="{x:Type Button}"> 
     <Setter Property="Background" Value="GhostWhite" /> 
     <Setter Property="Control.Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Button}"> 
        <!-- a simple square button --> 
        <Border Name="wrapper" 
          Width="{TemplateBinding Width}" 
          Height="{TemplateBinding Height}" 
          BorderBrush="{TemplateBinding BorderBrush}" 
          BorderThickness="{TemplateBinding BorderThickness}" 
          Margin="{TemplateBinding Margin}" 
          Background="#01000000"> 
         <!-- notice the wrapper has a background that is NEAR transparent. This is important. It'll ensure the button raises the click event --> 
         <Border Name=inner 
           Background="{TemplateBinding Background}"> 
          <ContentPresenter Margin="{TemplateBinding Padding}" 
               HorizontalAlignment="Center" 
               VerticalAlignment="Center" /> 
         </Border> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="Background" Value="#FFF48230"/> 
      </Trigger> 
      <Trigger Property="IsPressed" Value="true"> 
       <Setter Property="Background" Value="#FF99501B"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

然後使用該模板上的按鈕:

<Window...> 
    <Grid...> 
     <StackPanel Orientation="Horizontal" Grid.Row="7" Grid.Column="0" Grid.ColumnSpan="2" VerticalAlignment="Center" HorizontalAlignment="Center"> 
      <Button Style="{StaticResource MyButtonStyle}" Name="btnEdit" Cursor="Hand" Content="Edit Settings..." HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Margin="0,0,5,0" Click="btnEdit_Click"/> 
      <Button Style="{StaticResource MyButtonStyle}" Name="btnExit" Cursor="Hand" Content="Exit" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Margin="5,0,0,0" Click="btnExit_Click" /> 
     </StackPanel> 
    </Grid> 
</Window> 
+0

謝謝。這很有效,看起來像是一個更好的方式,所以我接受了它。不知道爲什麼我的工作不正常? – ChrisV

+0

由於按鈕默認使用的ControlTemplate使用Windows鑲邊進行設計。顏色綁定到系統顏色。 –

相關問題