我正在使用MVVM Light。我已經創建了一個看起來像這樣的窗口:動畫完成後的運行代碼
<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>
所以基本上,MainViewModel
是窗口視圖模型類。它包含:其被綁定到
bool MyControlVisible
屬性MyUserControl
的Visibility
屬性RelayCommand RaiseMyControl
命令其目的是將MyControlVisible
屬性的值設定爲true
(默認爲假)。
單擊窗口中的按鈕會導致出現MyUserControl
- 簡單。
MyUserControl
用戶控制是這樣的:
<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>
再次,很簡單。 MyUserControlViewModel
是用戶控件的視圖模型類。它包含:其綁定到TextBlock
的Text
財產
bool Fading
財產被綁定到邊境的數據模板
string MyUserControlText
屬性,是用來做 邊境淡入或淡出RelayCommand CloseMyControl
命令有兩個作用:1.它將Fading
屬性設置爲false
以使邊框淡出,2.將用戶控件的Visibility
屬性設置爲Collapsed
。
以下是問題:只要Visibility
設置爲Collapsed
,用戶控件就會消失。我需要它先消失然後消失。我怎樣才能做到這一點?謝謝。
@ H.B。再一次問好! :)由於動畫是在邊框上設置的,我需要'Visibility'來定位我的用戶控件,所以我如何從這個動畫中引用它? – Boris 2011-04-16 03:01:57
增加了一些關於這個答案的信息,看看它是否成功。 – 2011-04-16 03:06:57
我添加了ObjectAnimationUsingKeyFrames,但它不會摺疊'Visibility'屬性。它仍然是「可見」。我知道這是因爲我已經暫時將根佈局網格的背景顏色設置爲黃色。因此,邊界淡出,但控制仍然可見,即黃色。有什麼想法嗎? – Boris 2011-04-16 03:31:02