我目前正在学校开展一个项目。
我正在制作扫雷。这是它的外观:
游戏网格由背景中带有图像的按钮组成。 除非鼠标悬停在按钮上,否则它的工作正常。背景变为浅蓝色:
以下是我用来定义按钮的代码:
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编写的,但它对我的案例没有帮助。
如何将programmaticaly更改为一种状态,即当我使用鼠标时它不会改变背景?
答案 0 :(得分:2)
要实现这一点,您必须修改按钮的控制模板:
在style
resources
定义为xaml
<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;
}
}
答案 1 :(得分:0)
您必须使用以下内容更改鼠标悬停在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
,这样可以避免注册此事件。