Как постоянно аннулировать контроль форм, не мешая 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();
}