基本上,我得到的是一个简单的警报消息设置。有一个单独的警报视图,其中一些数据绑定到虚拟机的文本和颜色(绿色表示成功,红色表示错误等)。
<Border Margin="0 0 0 20" Background="{Binding Path=BackgroundColor}" BorderBrush="#D4D4D4" BorderThickness="1" CornerRadius="8">
<Border.Effect>
<DropShadowEffect Color="DarkGray"/>
</Border.Effect>
<Grid >
<Button Content="X" HorizontalAlignment="Left"
Margin="268,10,0,0" VerticalAlignment="Top" Width="20" RenderTransformOrigin="-0.48,0.727"/>
<TextBlock x:Name="Message"
Foreground="White" FontWeight="SemiBold" FontSize="13px"
Text="{Binding Path=Message}"
HorizontalAlignment="Left" Width="250"
TextWrapping="Wrap"
VerticalAlignment="Center" RenderTransformOrigin="-4.395,-0.038" Margin="7,13,0,25"/>
</Grid>
</Border>
目标是在您单击“X”按钮时让它们消失,并带有漂亮的淡入淡出动画。我有一个故事板来处理褪色:
<UserControl.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)">
<EasingDoubleKeyFrame KeyTime="0" Value="1"/>
<EasingDoubleKeyFrame KeyTime="0:0:1" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</UserControl.Triggers>
现在,我想做的是让 Caliburn.MicroCompleted
使用一种关闭实际视图的方法将 Caliburn.Micro 挂钩到情节提要的事件中(在另一个视图中有这些警报的可绑定集合,以便警报将堆叠然后在用户的愿望)。
起初我尝试过这样的事情,认为它与我的任何其他绑定一样工作:
<Storyboard cal:Message.Attach="[Event Completed] = [Action DismissMessage($source, $eventArgs)]">
<!-- rest of the codez... -->
但出现以下错误:
Cannot attach type "ActionMessage" to type "Storyboard". Instances of type "ActionMessage" can only be attached to objects of type "FrameworkElement".
我猜这很有意义......但是处理这种绑定的最佳方法是什么?我的思绪不可避免地开始徘徊于尝试一些 hacky 解决方案,例如从视图的代码隐藏中调用视图模型,但这似乎违反了 MVVM。
有什么建议么?