Я пытаюсь установить фоновое изображение в коде программной части. Я пытался добавить фоновое изображение на кнопку, но как только я наводил курсор на кнопку, изображение исчезало. Чтобы решить эту проблему, мне нужно написать функции, переопределяющие поведение кнопки, что слишком сложно для кода программной части.
Затем я использую альтернативный метод, то есть добавляю кнопку и изображение отдельно в ячейку сетки. Проблема в том, что когда я нажимаю на изображение, кнопка не срабатывает.
Как сделать так, чтобы кнопка имела эффект наведения и нажатия, даже когда мышь либо наводит курсор, либо нажимает на изображение на кнопке, но не на оставшуюся область кнопка?
Или надеюсь, что кто-то может предложить мне лучшее решение. Ниже приведен мой код.
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);
спасибо всем за участие, после того, как я покопался в этом, это вроде как сработало. Что я сделал, так это добавил Grid в Button.Content, а затем добавил изображение в Grid. И используйте Opacity, чтобы добавить эффект серого для ложного состояния 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;
}