Estoy usando MVVM Light. He creado una ventana que se parece a esto:Ejecutar el código después de que finalice la animación
<Window Name="MainWindow" ...>
<Window.Resources>
...
<viewModels:MainViewModel x:Key="mainVM" />
...
<BooleanToVisibilityConverter x:Key="visConv" />
...
</Window.Resources>
<Grid DataContext="{StaticResource mainVM}>
...
<Button Command="{Binding RaiseMyControl}" />
...
<my:MyUserControl Visibility="{Binding MyControlVisible,
Converter={StaticResource visConv}}" />
</Grid>
</Window>
Así que, básicamente, la MainViewModel
es una clase de vista del modelo de la ventana. Contiene:
bool MyControlVisible
propiedad que se enganchan aMyUserControl
'sVisibility
propiedadRelayCommand RaiseMyControl
comando cuyo propósito es establecer el valor de la propiedadMyControlVisible
atrue
(por defecto es falso).
Al hacer clic en el botón en la ventana resulta en la aparición del MyUserControl
- simple.
MyUserControl
control de usuario se ve así:
<UserControl ...>
<UserControl.Resources>
...
<viewModels:MyUserControlViewModel x:Key="userControlVM" />
...
</UserControl.Resources>
<Grid DataContext="{StaticResource userControlVM}>
...
<Border Width="200" Height="100" Background="Red">
<TextBlock Text="{Binding MyUserControlText}" />
</Border>
<!-- This border has a DataTrigger bound to "bool Fading" property of
the view model. When Fading is true, the border fades in through
an animation. When it is false, the border fades out. -->
...
<Button Command="{Binding CloseMyControl}" />
</Grid>
</UserControl>
Una vez más, muy simple. El MyUserControlViewModel
es una clase de modelo de vista para el control del usuario. Contiene:
string MyUserControlText
propiedad que se enganchan aTextBlock
'sText
propiedadbool Fading
propiedad que se enganchan a la plantilla de datos de frontera, y se utiliza para hacer el fundido frontera dentro o fueraRelayCommand CloseMyControl
comando que hace dos cosas: 1. Establece la propiedadFading
enfalse
para hacer que el borde se desvanezca, y 2. establece la propiedadVisibility
del control de usuario enCollapsed
.
Aquí está el problema: cuando el Visibility
se establece en Collapsed
, el control de usuario desaparece. Necesito que desaparezca primero y luego desaparezca después. ¿Cómo puedo hacer que suceda? Gracias.
@ H.B. ¡Hola de nuevo! :) Dado que la animación se establece en el borde y necesito 'Visibilidad' para orientar mi control de usuario, ¿cómo puedo hacer referencia a eso desde esta animación? – Boris
Agregó más información sobre eso a la respuesta, vea si funciona. –
Agregué el 'ObjectAnimationUsingKeyFrames', pero no colapsará la propiedad' Visibility'. Sigue siendo 'Visible'. Lo sé porque temporalmente establecí el color de fondo de la cuadrícula de diseño raíz en amarillo. Entonces, el borde se desvanece, pero el control permanece visible, es decir, amarillo. ¿Alguna idea? – Boris