1

アニメーションの移動が終了した後に WindowsFormsHost コントロールを強制的に再描画する方法を探していますが、解決策が見つかりません。

http://bitsbobsetc.wordpress.com/2011/07/10/creating-a-sliding-panel-in-wpf/に従って、WPF アプリケーションでスライド パネルを使用する例に従いました。

この例では、基本的な wpf コントロールのみを使用しています。私のスライド パネルでは、その主要部分は WindowsFormsHost です。私が抱えている問題は、アニメーションが正常に発生することですが、ユーザーが何か他の操作を行うまで WindowsFormsHost が描画されません。メイン ウィンドウを更新すると表示されるようになります。

スライド パネルを非表示にする場合も同様です。WindowsFormsHost は引き続き表示され、ユーザーが何か他の操作を行うまで操作できます。

Animating WindowsFormsHostから、これは既知の問題のようですが、パネルを表示したり隠したりするだけで、アニメーションにはあまり関心がありません。

以下は、現在の動作を説明するのに役立ついくつかの画像です。

SidePanelClosed SidePanelOpenNotDrawn SidePanelOpenAndDrawn SidePanelClosedButStillDrawn

4

1 に答える 1

1

Storyboardこの問題を調査した結果、クラスで利用できるイベントがいくつかあることがわかりました 。イベントの1つはCompletedイベントです。

.InvalidateVisual()の再描画を強制するusing の他の投稿からの情報を結び付けることによって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;
}
于 2012-10-05T14:13:44.953 に答える