2009-02-12 3 views
1

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

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

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

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

Любые идеи?

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

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

ответ

0

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

Так что в моем окне У меня есть

<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

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

+0

Но если я это сделаю, то элемент управления, который не является последним в XAML, не использует все доступное пространство. – Ray

Смежные вопросы