亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在WPF中更改Button MouseOver的背景?

如何在WPF中更改Button MouseOver的背景?

如何在WPF中更改Button MouseOver的背景?我在這個XAML頁面上有一個按鈕:<Button Content="Button" HorizontalAlignment="Left" VerticalAlignment="Bottom"      Width="50" Height="50" HorizontalContentAlignment="Left"      BorderBrush="{x:Null}" Foreground="{x:Null}" Margin="50,0,0,0">     <Button.Style>         <Style TargetType="Button">             <Setter Property="Background" Value="Green"/>             <Style.Triggers>                 <Trigger Property="IsMouseOver" Value="True">                     <Setter Property="Background" Value="Red"/>                 </Trigger>             </Style.Triggers>         </Style>     </Button.Style></Button>但是當我將鼠標放在我的按鈕上時,按鈕的背景會變為默認的窗口灰色背景。有什么問題?
查看完整描述

3 回答

?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

要刪除默認MouseOver行為,Button您需要修改ControlTemplate。將您的Style定義更改為以下內容應該可以解決問題:

<Style TargetType="{x:Type Button}">
    <Setter Property="Background" Value="Green"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border Background="{TemplateBinding Background}" BorderBrush="Black" BorderThickness="1">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="Red"/>
        </Trigger>
    </Style.Triggers></Style>

編輯:它已經晚了幾年,但你實際上可以在那里的邊框內設置邊框畫筆。Idk如果有人指出但它似乎不是......


查看完整回答
1 反對 回復 2019-08-19
?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

到目前為止,所有答案都涉及用其他東西完全替換默認按鈕行為。但是,恕我直言,通過編輯XAML元素的現有默認模板,了解可以更改您關注的部分是有用且重要的。

在處理上的WPF按鈕懸停效果的情況下,在一個WPF在外觀上的變化Button元件通過引起Trigger在用于默認的樣式Button,這是基于所述IsMouseOver屬性,并設置BackgroundBorderBrush頂層的性質Border元件在控件模板中。該Button元素的背景是下面Border元素的背景,因此更改Button.Background屬性不會阻止看到懸停效果。

通過一些努力,您可以使用自己的setter覆蓋此行為,但是因為您需要影響的元素在模板中而不能在您自己的XAML中直接訪問,所以這種方法很難并且IMHO過于復雜。

另一種選擇是利用圖形作為ContentButton,而不是Background。如果您需要在圖形上添加其他內容,則可以將它們與Grid作為內容中的頂級對象的組合使用。

但是,如果您只想完全禁用懸停效果(而不是僅隱藏它),則可以使用Visual Studio XAML設計器:

  1. 編輯XAML時,選擇“設計”選項卡。

  2. “設計”選項卡中,找到要禁用其效果的按鈕。

  3. 右鍵單擊該按鈕,然后選擇“編輯模板/編輯副本...”。在提示中選擇您希望放置新模板資源的位置。這似乎什么都不做,但實際上Designer會在你告訴它的地方添加新資源,并改變你的button元素以引用使用這些資源作為按鈕模板的樣式。

  4. 現在,您可以編輯該樣式。最簡單的方法是刪除或注釋掉(例如CtrlE,C<Trigger Property="IsMouseOver" Value="true">...</Trigger>元素。當然,您可以在此時對所需的模板進行任何更改。

完成后,按鈕樣式將如下所示:

<p:Style x:Key="FocusVisual">
  <Setter Property="Control.Template">
    <Setter.Value>
      <ControlTemplate>
        <Rectangle Margin="2" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/>
      </ControlTemplate>
    </Setter.Value>
  </Setter></p:Style><SolidColorBrush x:Key="Button.Static.Background" Color="#FFDDDDDD"/><SolidColorBrush x:Key="Button.Static.Border" Color="#FF707070"/><SolidColorBrush x:Key="Button.MouseOver.Background" Color="#FFBEE6FD"/><SolidColorBrush x:Key="Button.MouseOver.Border" Color="#FF3C7FB1"/><SolidColorBrush x:Key="Button.Pressed.Background" Color="#FFC4E5F6"/><SolidColorBrush x:Key="Button.Pressed.Border" Color="#FF2C628B"/><SolidColorBrush x:Key="Button.Disabled.Background" Color="#FFF4F4F4"/><SolidColorBrush x:Key="Button.Disabled.Border" Color="#FFADB2B5"/><SolidColorBrush x:Key="Button.Disabled.Foreground" Color="#FF838383"/><p:Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
  <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
  <Setter Property="Background" Value="{StaticResource Button.Static.Background}"/>
  <Setter Property="BorderBrush" Value="{StaticResource Button.Static.Border}"/>
  <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
  <Setter Property="BorderThickness" Value="1"/>
  <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 x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
          <ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
        </Border>
        <ControlTemplate.Triggers>
          <Trigger Property="IsDefaulted" Value="true">
            <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
          </Trigger>
          <!--<Trigger Property="IsMouseOver" Value="true">
            <Setter Property="Background" TargetName="border" Value="{StaticResource Button.MouseOver.Background}"/>
            <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.MouseOver.Border}"/>
          </Trigger>-->
          <Trigger Property="IsPressed" Value="true">
            <Setter Property="Background" TargetName="border" Value="{StaticResource Button.Pressed.Background}"/>
            <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Pressed.Border}"/>
          </Trigger>
          <Trigger Property="IsEnabled" Value="false">
            <Setter Property="Background" TargetName="border" Value="{StaticResource Button.Disabled.Background}"/>
            <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Disabled.Border}"/>
            <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="{StaticResource Button.Disabled.Foreground}"/>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter></p:Style>

(注意:您可以省略p:實際代碼中的XML命名空間限定...我在此提供它們只是因為Stack Overflow XML代碼格式化程序被<Style/>沒有XML命名空間的完全限定名稱的元素所混淆。)

如果要將相同的樣式應用于其他按鈕,只需右鍵單擊它們并選擇“編輯模板/應用資源”,然后選擇剛為第一個按鈕添加的樣式。您甚至可以使用常規技術將默認樣式應用于XAML中的元素,從而使該樣式成為所有按鈕的默認樣式。


查看完整回答
反對 回復 2019-08-19
  • 3 回答
  • 0 關注
  • 2834 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號