我有一个位于WindowsFormsHost
的控件。此控件用于在OpenGL上下文中绘制内容,并且需要在每次绘制后无效。
问题:如果我这样做,WPF控件不再响应了。您可以单击它们并且它们可以正常工作,但是当您将鼠标悬停在其上或按下WPF按钮时,您不会获得任何视觉反馈。如果将鼠标悬停在按钮上,按钮不会改变颜色或正常情况下的颜色。
我为你创建了一个小副本:
<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
中使用持续失效,就像在repro中一样,而不会丢失按钮上的视觉反馈?
答案 0 :(得分:0)
解决方案是ABT博士在评论中显示的CompositionTarget.Rendering
事件。
Constructor()
{
CompositionTarget.Rendering += CompositionTarget_Rendering;
}
void CompositionTarget_Rendering(object sender, EventArgs e)
{
_myControl.Invalidate();
}