簡體   English   中英

覆蓋IsMouseOver並根據WPF按鈕中的邏輯更改背景色

[英]Override IsMouseOver and change background color based on logic in WPF Button

目標要使onMouseEnter按鈕背景的默認行為是什么都不做,但仍允許在應用程序邏輯中以編程方式更改按鈕背景。

多個帖子地址覆蓋了默認的MouseOver行為:

例如: 如何在WPF中禁用按鈕上的MouseOver效果?

但是,在我的應用程序中,我需要繼續更改背景色,並將MouseOver背景色設置為Trigger會覆蓋我的更改。

 <Button Content="Start" Name="buttonStart" Style="{StaticResource mainButton}" PreviewMouseDown="buttonStart_MouseDown"/>
 <Button Content="Stop" Name="buttonStop" Style="{StaticResource mainButton}" PreviewMouseDown="buttonStop_MouseDown"/>

App.xaml樣式

<Style x:Key="mainButton" TargetType="{x:Type Button}">

           <Setter Property="Width" Value="250"/>
            <Setter Property="Height" Value="75"/>
            <Setter Property="FontSize" Value="40"/>
            <Setter Property="FontFamily" Value="Segoe UI Light"/>
            <Setter Property="Foreground" Value="White"/>
            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border Name="Border"  BorderThickness="1"

                BorderBrush="#404040">
                        <ContentPresenter Margin="2" 
                             HorizontalAlignment="Center"
                             VerticalAlignment="Center" 
                             RecognizesAccessKey="True"/>
                    </Border>
                    <ControlTemplate.Triggers>
                     <Trigger Property="IsMouseOver" Value="true">
                            <Setter TargetName="Border" 
                      Property="Background" Value="{x:Null}" />
                        </Trigger>

                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>


        </Style>

邏輯:

private void buttonStop_MouseDown(object sender, RoutedEventArgs e)
        {

        //Change background colors for buttonStop and buttonStart

    }

private void buttonStart_MouseDown(object sender, RoutedEventArgs e)
        {

        //Change background colors for buttonStop and buttonStart

    }

如何使按鈕上的背景在onMouseEnter上不執行任何操作,但仍在代碼中更改背景?

如果無法刪除觸發器,則可以對按鈕上的內容使用TextBlock,然后在后面的代碼中設置TextBlock OnClick的背景。 您將不得不調整樣式,以允許TextBlock填充Button,以使其正確顯示。

像這樣:

private void buttonStop_MouseDown(object sender, RoutedEventArgs e)
{
    //Change background colors for buttonStop and buttonStart
    TextBlock tb = new TextBlock();
    tb.Background = Brushes.Blue;
    ((Button)sender).Content = tb;
}

......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM