我有一个自定义控件,我想在其上添加鼠标悬停行为,将整个对象置于z顺序的顶部,然后当鼠标悬停在a上时让它回落到位画布上的不同对象。
我有以下XAML,其中颜色设置动画,控件中矩形的ZIndex动画(遮蔽椭圆),但我无法将整个控件带到其他所有的前面父画布中的控件。 XAML的麻烦部分在下面的前后显示为空行。
<Style TargetType="local:CustomControl1">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:CustomControl1">
<Grid x:Name="PartLayoutRoot">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="MouseOver">
<Storyboard>
<Int32AnimationUsingKeyFrames
Storyboard.Target="{Binding RelativeSource={RelativeSource TemplatedParent} }"
Storyboard.TargetProperty="(Canvas.ZIndex)">
<DiscreteInt32KeyFrame KeyTime="0" Value="99" />
</Int32AnimationUsingKeyFrames>
<Int32AnimationUsingKeyFrames
Storyboard.TargetName="Rect"
Storyboard.TargetProperty="(Canvas.ZIndex)">
<DiscreteInt32KeyFrame KeyTime="0" Value="99" />
</Int32AnimationUsingKeyFrames>
<ColorAnimation To="Red"
Storyboard.TargetName="Rect"
Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"
Duration="0:0:1" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Rectangle x:Name="Rect" Fill="Blue" Height="40" Width="40" />
<Ellipse Fill="Green" Height="30" Width="30" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
基本上我可以为ZIndex intra -control设置动画,但不能 inter -control。我已经阅读了this post,这意味着我应该可以这样做 - 请注意,在我的情况下,模板父是自定义控件的实例,而不是列表中的元素所以这种情况下的解决方案似乎并不适用。我得到的错误是
System.Windows.Data错误:2:找不到管理FrameworkElement 或目标元素的FrameworkContentElement。 BindingExpression:(无 路径);的DataItem = NULL;目标元素是&#39; Int32AnimationUsingKeyFrames&#39; (的HashCode = 58939632);目标财产是&#39;目标&#39; (类型 &#39;的DependencyObject&#39)
在其他地方,我读过这个并不起作用,因为从Binding回来的东西不是一个依赖对象。我现在所有人都在使用代码,但是寻找更优雅的XAML解决方案。
答案 0 :(得分:0)
此处的解决方案是更改ZIndex
而不是模板的VisualState
,但是在样式的触发器中。
<Style TargetType="local:CustomControl1">
<Setter Property="Template">
...
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="(Canvas.ZIndex)" Value="99"/>
</Trigger>
</Style.Triggers>
</Style>
希望这有帮助!