【问题标题】:Override IsMouseOver and change background color based on logic in WPF Button覆盖 IsMouseOver 并根据 WPF Button 中的逻辑更改背景颜色
【发布时间】:2016-08-27 19:13:04
【问题描述】:

目标 要使按钮背景 onMouseEnter 的默认行为不执行任何操作,但仍允许以编程方式更改应用程序逻辑中的按钮背景。

覆盖默认 MouseOver 行为的多个帖子地址:

例如:How do you disable MouseOver effects on a Button in WPF?

但是,在我的应用程序中,我需要不断更改背景颜色,并将 MouseOver 背景颜色设置为触发器会覆盖我的更改。

 <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

    }

如何使按钮上的背景在鼠标输入上不执行任何操作,但仍更改代码中的背景?

【问题讨论】:

  • 为什么不直接删除触发器?
  • 我可以移除触发器,但需要一些替代方法来移除默认的 mouseOver 效果

标签: c# wpf


【解决方案1】:

如果您无法删除触发器,您可以为按钮上的内容使用 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;
}

......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    相关资源
    最近更新 更多