MVVM
フレームワークを使用せずにWPF
のアプリケーションを開発しました。今、このアプリケーションはますます大きくなっています。したがって、Caliburn.Micro
に切り替える必要がありますが、これによって問題が発生します。RelativeSourceを持つCaliburn.Micro DataTrigger TemplatedParent
ItemsControl
の中にListBoxes
を含むビューがあります。 ListBoxItems
は、ユーザーがListBox
の上に移動すると不透明度を変更し、再びユーザーがButton
(およびマウスがこれらのコントロールから再び離れるときの途中)を移動すると、ボタンを配置するボタンです。これを達成するために、私はこのxaml
コードを思い付いた:私はカリバーンに切り替えた後
<Style x:Key="DeleteButtonStyle" TargetType="Button">
<Setter Property="Opacity" Value="0.0" />
<Style.Triggers>
<EventTrigger RoutedEvent="Control.MouseEnter">
<RemoveStoryboard BeginStoryboardName="PartiallyFadeOutStoryboard" />
<RemoveStoryboard BeginStoryboardName="FadeOutStoryboard" />
<BeginStoryboard Storyboard="{StaticResource FadeInStoryboard}" x:Name="FadeInStoryboard"/>
</EventTrigger>
<EventTrigger RoutedEvent="Control.MouseLeave">
<RemoveStoryboard BeginStoryboardName="PartiallyFadeInStoryboard" />
<RemoveStoryboard BeginStoryboardName="FadeInStoryboard" />
<BeginStoryboard Storyboard="{StaticResource PartiallyFadeOutStoryboard}" x:Name="PartiallyFadeOutStoryboard"/>
</EventTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsMouseOver, NotifyOnSourceUpdated=True}" Value="True">
<DataTrigger.EnterActions>
<RemoveStoryboard BeginStoryboardName="PartiallyFadeOutStoryboard" />
<RemoveStoryboard BeginStoryboardName="FadeOutStoryboard" />
<BeginStoryboard Storyboard="{StaticResource PartiallyFadeInStoryboard}" x:Name="PartiallyFadeInStoryboard"/>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="PartiallyFadeInStoryboard" />
<RemoveStoryboard BeginStoryboardName="FadeInStoryboard" />
<RemoveStoryboard BeginStoryboardName="PartiallyFadeOutStoryboard" />
<BeginStoryboard Storyboard="{StaticResource FadeOutStoryboard}" x:Name="FadeOutStoryboard"/>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
悲しいことに、これはもう実行されていない最後のDataTrigger
のコードとして、今、これ以上の作業ではありません。私はこの動作の理由は、以前はをItemsControl
の内部で使用してビューを定義していたためです。今度は、ItemsControl
(ListBox
を含む)にバインドされているこのアイテムのビューのためだけに、.xaml
ファイル/クラスを作成しました。したがって、RelativeSource TemplatedParent
はもう機能していない可能性があります。このアイデアは正しいですか?どのように私は最もエレガントな方法でこの問題を解決することができますか?
これは機能しています。しかし:私は同じスタイルを異なるボタンに使用しています(上記の状況では1回、別の 'ItemsControl'では1回)、共通の祖先型を持つとは限りません。それについてのアイデア? – FlashTek
それは別の質問です。しかし、共通の祖先型がない場合は、2つの異なるトリガー/異なるスタイルを定義する必要があります。データトリガーのバインディングを何らかの形で動的に変更することはできません。 – mm8