Как постоянно аннулировать контроль форм, не мешая WPF?

У меня есть контроль, который находится в WindowsFormsHost, Этот элемент управления предназначен для рисования содержимого в контексте OpenGL и должен быть аннулирован после каждого рисования.

Проблема: элементы управления WPF больше не реагируют, если я это сделаю. Вы можете нажать на них, и они будут работать, но вы не получите никакой визуальной обратной связи, например, когда вы наводите курсор на нее или нажимаете кнопку WPF. Кнопка не меняет цвет или что-то, что она обычно делает, если вы наводите курсор на нее.

Я создал для вас маленькую репродукцию:

XAML

<Grid>
  <WindowsFormsHost x:Name="uxContainerWindowsFormsHost" HorizontalAlignment="Left" Height="163" Margin="101,29,0,0" VerticalAlignment="Top" Width="223"/>
  <Button Content="Button" HorizontalAlignment="Left" Margin="225,260,0,0" VerticalAlignment="Top" Width="75"/>
</Grid>

Код

public MainWindow()
    {
        InitializeComponent();

        var b = new System.Windows.Forms.Button();
        b.BackColor = System.Drawing.Color.Gray;
        b.Text = "Button";
        b.Paint += b_Paint;

        uxContainerWindowsFormsHost.Child = b;
    }

    void b_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
        (sender as System.Windows.Forms.Button).Invalidate();
    }

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

Вопрос

Как я могу использовать постоянную инвалидность в моем WindowsFormsHost как в репро, без потери визуального отклика на мои кнопки?

1 ответ

Решение

Решение было CompositionTarget.Rendering Событие, которое доктор ABT показал в комментарии.

Constructor()
{
  CompositionTarget.Rendering += CompositionTarget_Rendering;
}

void CompositionTarget_Rendering(object sender, EventArgs e)
{
  _myControl.Invalidate();
}
Другие вопросы по тегам