1

DockPanelを備えた非常に基本的なWPFフォームがあり、メニューバー、ステータスバー、およびUserControlがあります。そのようです:

<DockPanel>
  <Menu DockPanel.Dock="Top">
    ...
  </Menu>
  <StatusBar DockPanel.Dock="Bottom">
    ...
  </StatusBar>
  <UserControls:MyUserControl />
<DockPanel>

私の問題は次のとおりです。イベントに基づいて、UserControlを2番目のユーザーコントロールに移行したいと思います。

両方がXAMLで定義されていても問題はありませんが(他のコントロールがどうなるかはわかっているので)、アニメーション(理想的には何か)を使用できるようにするために必要なコンテナーの種類を理解できません。 1つが左に消え、もう1つが右から現れるように)。UserControlsは、使用可能なすべてのスペースを使い果たすために自動的に拡張する必要があります。

何か案は?

編集:これが私が一般的な意味でやろうとしていることです。多分誰かがより良い方法を提案することができます。

クライアントのリストがあるListView/GridViewがあります。ユーザーがクライアントをダブルクリックしたときに、クライアントのリストを、そのクライアントの詳細を表示する(さらに、クライアントが対話できるようにする)UserControlに置き換えたいと思います。

4

2 に答える 2

0

Can't you just have them both there but one of their Visibility's set to collapsed, then on the event fire, just switch the two?

于 2009-02-12T04:06:58.620 に答える
0

やり方を発見。UserControl が以前あった場所にグリッドを配置し、その中に両方の UserControl を配置しました。1 つを表示に、もう 1 つを折りたたみに設定します。次に、イベントが発生すると、(とりわけ) 可視性を交換するアニメーションを再生できます。

だから私の窓には

<Grid>
    <UserControls:Control1 x:Name="Control1" />
    <UserControls:Control2 x:Name="Control2" />
</Grid>

次に、ウィンドウリソースでこれ

<Storyboard x:Key="ShowControl2">
    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Control1" Storyboard.TargetProperty="(UIElement.Visibility)">
        <DiscreteObjectKeyFrame KeyTime="00:00:00.2000000" Value="{x:Static Visibility.Collapsed}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Control2" Storyboard.TargetProperty="(UIElement.Visibility)">
        <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Visible}"/>
    </ObjectAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Control1" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
        <SplineDoubleKeyFrame KeyTime="00:00:00.2000000" Value="0"/>
    </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Control2" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
        <SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
        <SplineDoubleKeyFrame KeyTime="00:00:00.2000000" Value="1"/>
    </DoubleAnimationUsingKeyFrames>
</Storyboard>

次に、コントロール 1 を非表示にしてコントロール 2 を表示するコードでは、次のようにします。

Storyboard showControl2Animation = (Storyboard)FindResource("ShowControl2");
showControl2Animation .Begin();
control2.Focus();
于 2009-02-13T02:34:29.490 に答える