基本的に、私が持っているのは単純な警告メッセージのセットアップです。テキストと色 (成功の場合は緑、エラーの場合は赤など) の VM へのデータ バインディングを含む個々のアラートのビューがあります。
<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.Micro をストーリーボードのCompleted
イベントにフックして、実際のビューを非表示にする方法です (別のビューにこれらのアラートのバインド可能なコレクションがあり、アラートがスタックされてから破棄されるようにするためです)。ユーザーの希望)。
最初は、他のバインディングと同じように機能すると考えて、次のようなものを試しました。
<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".
そして、これは十分に理にかなっていると思います...しかし、このバインディングのようなものを処理する最良の方法は何ですか? 私の心は必然的に、ビューの分離コードからビューモデルを呼び出すなどのハックな解決策を試みることに迷い始めますが、それは MVVM に違反しているようです。
助言がありますか?