Кнопка изображения в C # Code позади - PullRequest
1 голос
/ 22 марта 2011

Я пытаюсь установить фоновое изображение в коде позади.Я попытался добавить фоновое изображение к кнопке, но как только я наведу курсор на кнопку, изображение исчезнет.Чтобы решить эту проблему, я должен написать функции для переопределения поведения кнопки, что слишком много для кода.

Затем я использую альтернативный метод, который заключается в добавлении кнопки и изображения отдельно в ячейку сетки.Проблема в том, что когда я нажимаю на изображение, кнопка не срабатывает.

Как заставить кнопку иметь эффект при наведении и при нажатии , даже когда мышь либо зависает, либо нажимает изображение на кнопке, но неоставшаяся область кнопки?

Или надеюсь, что кто-то может предложить мне лучшее решение. Ниже приведен мой код.

        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;
    }

Ответы [ 2 ]

1 голос
/ 22 марта 2011

Кнопки в WPF имеют разные состояния = "нормальное", "наведение мыши" и "нажатие" - три.

Когда вы создаете настраиваемую кнопку, она находится в «нормальном» состоянии. Вам также необходимо установить состояние «наведение мыши», чтобы иметь такое же изображение.

...