我正在寻找一种方法来强制WindowsFormsHost控件在动画完成移动后重绘自己,但我找不到解决方案。
我按照一个示例,按照http://bitsbobsetc.wordpress.com/2011/07/10/creating-a-sliding-panel-in-wpf/
在我的WPF应用程序中设置了一个滑动面板在示例中,他仅使用基本的wpf控件。在我的滑动面板中,它的主要部分是WindowsFormsHost。我遇到的问题是动画应该发生,但WindowsFormsHost在用户与其他内容交互之后才会被绘制。就像刷新主窗口一样可以看到它。
当要隐藏滑动面板时会发生同样的事情。 WindowsFormsHost仍然显示,可以与用户交互其他内容进行交互。
从Animating WindowsFormsHost来看,这似乎是一个已知问题,但我并不过分担心动画,只是显示和隐藏面板。
以下是一些有助于描述当前行为的图片。
答案 0 :(得分:0)
通过研究这个问题,我发现有一些事件可用于Storyboard
类。其中一个事件是Completed
事件。
通过绑定使用.InvalidateVisual()
的其他帖子中的信息来强制重绘WindowsFormsHost
。这适用于动画的滑出部分。对于向后滑动,我只是简单地隐藏WindowsFormsHost
,因为它开始关闭动画。这样,当面板关闭时,它不会在用户空间中徘徊。
的Xaml:
<Storyboard x:Key="expandStoryBoard"
TargetProperty="RenderTransform.(TranslateTransform.X)"
AccelerationRatio=".4"
DecelerationRatio=".4" Completed="Storyboard_Completed">
<DoubleAnimation Storyboard.TargetName="SidePanel" Duration="0:0:0.6"
From="0" To="250">
</Storyboard>
代码背后:
private void Storyboard_Completed(object sender, EventArgs e)
{
this.InvalidateVisual();
}
private void OpenPanel()
{
SidePanel.BeginStoryboard((Storyboard)this.Resources["expandStoryBoard"]);
expanded = !expanded;
}