我試圖在WPF中獲得一個消息面板動畫,但迄今沒有取得成功。無法得到(相當簡單)WPF動畫工作
情況是這樣的:
- 我有包含
StackPanel
綁定到該控件的視圖模型對象(ViewModel.Messages
)的(可觀察的)收集一個ItemsControl
用戶控制。 - 當我需要向用戶顯示消息時,我會將這些消息(如
MessageVM
實例)添加到可觀察集合中。
的ItemsControl
的知名度勢必整數屬性稱爲ViewModel.CountVisibleMessages
,有一個轉換器轉換採取0到Visibility.Hidden
和積極的價值觀Visibility.Visible
的照顧。
這工作得很好。當消息被添加到集合中時,StackPanel
自動變爲可見,並且當用戶(或計時器)移除最後被隱藏的消息時。當然,高度會自動調整以適應所有消息。
爲了使一切看起來更好,我更喜歡它,如果StackPanel
使用300毫秒運行的動畫本身調整大小。 (最後,我也想它加速deccelerate但是這超出了我的野心現在。
我已經嘗試了幾個小時,但現在我覺得我還差得遠。 下面是我目前(還差得遠在工作的時刻)XAML:。
<StackPanel Orientation="Vertical"
VerticalAlignment="Top"
Visibility="{Binding CountVisibleMessages, Converter={StaticResource IntToVisibility}}"
Height="Auto"
Background="{DynamicResource HmiBackColorLightBrush}">
<StackPanel.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding CountVisibleMessagesChanged}" Value="True" ><!-- I suppose I shopuld've used a Routed Event here but I just needed to get it triggered -->
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetProperty="Margin.Bottom"
From="100" <!-- Just a made up value to test the concept -->
To="0"
Duration="0:0:0:3"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<ItemsControl ItemsSource="{Binding Messages}" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Style="{DynamicResource Message}">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="15" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Text}" Margin="3" Style="{Binding MessageType, Converter={StaticResource MessageTypeToStyle}, ConverterParameter={x:Type TextBlock}}" /> <!-- using dynamic styling here -->
<RadioButton Grid.Column="1" Style="{DynamicResource HmiCloseMessageButton}" IsChecked="{Binding IsVisible, Converter={StaticResource BoolToVisibility}, ConverterParameter=true}" />
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
(我不知道上面的XAML將無法獲得的StackPanel慢慢自動調整這只是一項實驗,以獲取任何發生)
這不能太困難,我想(這是一個非常標準的用戶界面行爲許多程序),所以我會很感激,如果有人能指出我在正確的方向。
乾杯
我試過了Height屬性和成功相同(缺少)。我真正想要實現的是StackPanel調整自己的大小以適應其內容,但速度很慢。我不知道故事板是否正在發射,但我懷疑它。有什麼我可以做的測試嗎? –
你有沒有考慮過膨脹機?它可能非常接近你想要創建的東西? – Paparazzi
我不知道如何調試XAML並知道「代碼」是否正在觸發。 – Paparazzi