我正在尝试在代码隐藏中设置图像背景。我尝试在按钮上添加背景图像,但只要将鼠标悬停在按钮上,图像就会消失。要解决这个问题,我必须编写函数来覆盖按钮行为,这在代码隐藏中要做得太多了。
然后我使用另一种方法,即将一个按钮和一个图像分别添加到网格单元格中。问题是 - 当我点击图像时,按钮不会触发。
如果鼠标悬停或按下按钮上的图像,而不是按钮,如何使按钮具有悬停和按下效果按钮的剩余区域?
或希望有人可以建议我一个更好的解决方案。下面是我的代码。
InitializeComponent();
Button playBtn = new Button();
playBtn.Width = 60;
playBtn.Height = 30;
Image playIcon = new Image();
playIcon.Source = new BitmapImage(new Uri(@"PATH"));
playIcon.Stretch = Stretch.Uniform;
playIcon.Height = 25;
grid1.Children.Add(playBtn);
grid1.Children.Add(playIcon);
Grid.SetColumn(playBtn, 0);
Grid.SetRow(playBtn, 0);
Grid.SetColumn(playIcon, 0);
Grid.SetColumn(playIcon, 0);
感谢所有人的投入,在深入研究之后,它有点成功。我所做的是将网格添加到 Button.Content ,然后将图像添加到网格中。并使用不透明度为 IsEnable 错误状态添加灰显效果。下面我发布我的代码,希望有人发现它有用或改进:
Button playBtn = new Button();
Image playIcon = new Image();
public MainWindow()
{
InitializeComponent();
Grid grid2 = new Grid();
RowDefinition grid2_row1 = new RowDefinition();
ColumnDefinition grid2_col1 = new ColumnDefinition();
grid2.RowDefinitions.Add(grid2_row1);
grid2.ColumnDefinitions.Add(grid2_col1);
playBtn.Width = 60;
playBtn.Height = 30;
playBtn.Click += playBtn_Click;
playIcon.Source = new BitmapImage(new Uri(@"pack://PATH..."));
playIcon.Stretch = Stretch.Uniform;
playIcon.Height = 25;
playBtn.Content = grid2;
grid2.Children.Add(playIcon);
grid1.Children.Add(playBtn);
Grid.SetRow(playIcon, 0);
Grid.SetColumn(playIcon, 0);
}
public void playBtn_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hello");
}
private void button1_Click(object sender, RoutedEventArgs e)
{
playBtn.IsEnabled = false;
playIcon.Opacity = 0.3;
}
答案 0 :(得分:1)
WPF中的按钮有不同的状态=“正常”,“鼠标悬停”和“按下”是三种。
创建按钮时,您将其设置为“正常”状态。您还需要将“鼠标悬停”状态设置为具有相同的图像。
答案 1 :(得分:1)