【发布时间】:2018-02-15 20:24:14
【问题描述】:
我使用WPF 开发了一个应用程序,而没有使用特殊的MVVM 框架。现在这个应用越来越大了;因此,我想切换到Caliburn.Micro,但这会导致一些问题。
我有一个在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>
可悲的是,现在,在我切换到 Caliburn 之后,不再工作,因为最后一个 DataTrigger 的代码不再执行。我认为这种行为的原因是我之前在ItemsControl 中使用了DataTemplate 来定义视图;但是现在我创建了一个额外的.xaml 文件/类,只是为了查看绑定到ItemsControl(其中包含ListBox)的这些项目——因此,RelativeSource TemplatedParent 可能不再工作了。这个想法正确吗?我怎样才能以最优雅的方式解决这个问题?
【问题讨论】:
标签: wpf xaml mvvm caliburn.micro caliburn