WPF: Как я могу перейти от одного закрепленного UserControl к другому? - PullRequest
1 голос
/ 12 февраля 2009

У меня есть довольно простая форма WPF с DockPanel, есть строка меню, строка состояния и UserControl. Вот так:

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

Моя проблема: В зависимости от события я хочу перевести UserControl на второй пользовательский элемент управления.

Нет проблем с тем, что они оба определены в XAML (так как я знаю, каким будет другой элемент управления), но я просто не могу определить, какой тип контейнера мне нужен для этого, что позволит мне использовать анимацию (в идеале что-то вроде одного, исчезающего слева, а другого, появляющегося справа). UserControls должен автоматически увеличиваться, чтобы использовать все доступное пространство.

Есть идеи?

Редактировать: Вот что я пытаюсь сделать в общем смысле. Может быть, кто-то может предложить лучший способ.

У меня есть ListView / GridView, в котором есть список клиентов. Когда пользователь дважды щелкает по клиенту, я хочу заменить список клиентов на UserControl, который отображает сведения об этом клиенте (и дополнительно позволяет им взаимодействовать).

Ответы [ 2 ]

0 голосов
/ 13 февраля 2009

Найден способ сделать это. Я поместил сетку там, где раньше был UserControl, а затем поместил в нее оба UserControl. Установите один видимый, а другой свернутый. Затем на пожаре событий я могу воспроизвести свою анимацию, которая (среди прочего) меняет видимость.

Так у меня в окне

<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();
0 голосов
/ 12 февраля 2009

Разве вы не можете просто сделать так, чтобы они оба были там, кроме одного из их Видимости, установленного как разрушенное, а затем при пожаре события просто переключить их?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...