我有这种wpf风格:
<Style x:Key="RequiredControlTemplate">
<Style.Setters>
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<StackPanel>
<Popup IsOpen="{Binding ElementName=Adorner, Path=IsMouseOver}">
<TextBlock Text="{Binding ElementName=Adorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" />
</Popup>
<Border Grid.Column="1" BorderBrush="Red" BorderThickness="1" HorizontalAlignment="Stretch">
<AdornedElementPlaceholder Name="Adorner"/>
</Border>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
我希望如果鼠标悬停在Adorner上,则弹出窗口已打开,但IsOpen="{Binding ElementName=Adorner, Path=IsMouseOver}
无效...
答案 0 :(得分:1)
将Mode=OneWay
添加到绑定中。默认情况下,IsOpen为TwoWay
,只读属性不允许TwoWay
绑定。
答案 1 :(得分:1)
我的风格做了一些改变。 添加了几个故事板以弹出打开...并在adorner元素上触发故事板
<Style x:Key="RequiredControlTemplate">
<Style.Setters>
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<StackPanel>
<StackPanel.Resources>
<Storyboard x:Key="OnMouseEnter1">
<BooleanAimationUsingKeyFrames Storyboard.TargetProperty="(Popup.IsOpen)" Storyboard.TargetName="popup">
<DiscreteBooleanKeyFrame KeyTime="0" Value="True"/>
</BooleanAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="OnMouseLeave1">
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="(Popup.IsOpen)" Storyboard.TargetName="popup">
<DiscreteBooleanKeyFrame KeyTime="0" Value="True"/>
<DiscreteBooleanKeyFrame KeyTime="0:0:0.1" Value="False"/>
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</StackPanel.Resources>
<Popup Name="popup">
<TextBlock Text="{Binding ElementName=Adorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" />
</Popup>
<Border Grid.Column="1" BorderBrush="Red" BorderThickness="1" HorizontalAlignment="Stretch">
<AdornedElementPlaceholder Name="Adorner">
<AdornedElementPlaceholder.Triggers>
<EventTrigger RoutedEvent="Mouse.MouseLeave" SourceName="Adorner">
<BeginStoryboard x:Name="OnMouseLeave1_BeginStoryboard" Storyboard="{StaticResource OnMouseLeave1}"/>
</EventTrigger>
<EventTrigger RoutedEvent="Mouse.MouseEnter" SourceName="Adorner">
<BeginStoryboard Storyboard="{StaticResource OnMouseEnter1}"/>
</EventTrigger>
</AdornedElementPlaceholder.Triggers>
</AdornedElementPlaceholder>
</Border>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
答案 2 :(得分:0)
如果您不遵循MVVM模式,则可以在xaml中指定x:code
,您可以在其中处理MouseOver事件,并使用EventSetter
附加它。