【问题标题】:wpf c# Change mouse hover backgroundwpf c#更改鼠标悬停背景
【发布时间】:2017-05-23 17:46:29
【问题描述】:

我目前正在学校做一个项目。

我正在制作扫雷。下面是它的外观:

游戏网格由背景中带有图像的按钮组成。 它工作得很好,除非鼠标悬停在按钮上;背景变为浅蓝色:

这是我用来定义按钮的代码:

for (int i = 0; i < row; i++)
{
    for (int j = 0; j < col; j++)
    {
        Button temp = new Button();
        temp.Background = situationImages[0];
        temp.Height = 16;
        temp.Width = 16;
        temp.Click += window.button_Click;
        temp.MouseRightButtonUp += window.button_Right_Click;
        gameGrid.Children.Add(temp);
        Grid.SetRow(temp, j);
        Grid.SetColumn(temp, i);
        MainWindow.buttons[i, j] = temp;
    }
}

到目前为止,我看到的所有解决方案都是用 XAML 编写的,但这对我的情况没有帮助。

如何以编程方式将其更改为当我悬停鼠标时它不会改变背景的状态?

【问题讨论】:

  • 你有什么问题?
  • 如何以编程方式将其更改为当我悬停鼠标时不会改变背景的状态@Bojje
  • 查看我编辑的答案。为您提供任何您想要的背景颜色

标签: c# wpf


【解决方案1】:

为此,您必须修改按钮的控件模板:

xaml 中将style 定义为resources

<Style x:Key="btnStyle" TargetType="{x:Type Button}">    
        <Setter Property="Background" Value="Gray"/>        
        <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="Gray"/>
            </Trigger>
        </Style.Triggers>
 </Style>

然后在后面的代码中你可以像这样使用它:

for (int i = 0; i < row; i++)
{
  for (int j = 0; j < col; j++)
  {
    Button temp = new Button();
    temp.Background = situationImages[0];
    temp.Height = 16;
    temp.Width = 16;
    temp.Style = this.FindResource("btnStyle") as Style; // Apply your style here
    temp.Click += window.button_Click;
    temp.MouseRightButtonUp += window.button_Right_Click;
    gameGrid.Children.Add(temp);
    Grid.SetRow(temp, j);
    Grid.SetColumn(temp, i);
    MainWindow.buttons[i, j] = temp;
   }
}

【讨论】:

  • 很高兴为您提供帮助:)
【解决方案2】:

您必须使用以下命令在鼠标悬停时更改 Button 的背景:

temp.MouseEnter += BtnFirstButton_MouseEnter;

private void temp_MouseEnter(object sender, MouseEventArgs e)
{
    if (btnFirstButton.IsMouseOver)
        btnFirstButton.Background = <color>;

    else
        btnFirstButton.Background = <color>;
}

您还可以定义Style 并将其应用于Buttons,这样可以避免注册此事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多