WPF,见见这个提示框与触发器
WPF,看看这个提示框与触发器

上例中,在Control的控件模板中,有一个Popup提示框,触发器设置为当鼠标移到控件上时,显示提示框。
但是,我有点不明白的是,当鼠标移开后,提示框为什么没有关闭呢,属性触发器的规则是,当不再满足触发条件时,触发器所更改的属性会自动重置为其旧值,可是这里的Popup的IsOpen为什么没有变为false呢?
------解决方案--------------------
可能wph对IsMouseOver做了优化,因为该动作在不停发生
------解决方案--------------------
StaysOpen="True"
http://msdn.microsoft.com/zh-cn/library/system.windows.controls.primitives.popup.staysopen%28v=vs.110%29.aspx
------解决方案--------------------
MSDN上说
Popup.StaysOpen 属性
1.获取或设置一个值,该值指示当 Popup 控件焦点不再对准时,是否关闭该控件。
2.如果在 IsOpen 属性设置为 false 时关闭 Popup 控件,则为 true;如果在 Popup 控件外发生鼠标或键盘事件时关闭 Popup 控件,则为 false。 默认值为 true。
3.当将 StaysOpen 属性设为 true 时,Popup 始终处于打开状态,直到通过将 IsOpen 属性设置为 false 将其显式关闭。 当 StaysOpen 设置为 false 时,Popup 控件会截获所有鼠标事件和键盘事件,以确定在 Popup 控件之外发生这些事件之一。
还有
默认情况下,Popup.StaysOen属性被设置为True,并且Popup控件会一直显示,直到显式地将IsOpen属性设置为False。如果将Popup.StaysOpen属性设置为False,当用户在其他地方单击鼠标时,Popup控件就会消失。
总之,上面的意思是说,当 Popup.StaysOen = false时,当 Popup 控件焦点不再对准时,就不关闭该控件,只有在当用户在其他地方单击鼠标时,Popup控件就会消失。
所以,你只需要把上述代码中 StaysOpen="False" 去掉就可以了,让它一直=true
<Window x:Class="WPF1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WPF1"
Title="MainWindow" Height="550" Width="825">
<Window.Resources>
<Style x:Key="aa" TargetType="Control">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Control">
<Border BorderThickness="1" Background="Red" Height="40" Width="60">
<Popup Name="pop1" StaysOpen="False">
<TextBlock Text="张三" Background="Yellow"/>
</Popup>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="pop1" Property="Popup.IsOpen" Value="True"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<Control Style="{StaticResource aa}"/>
</Grid>
</Window>
上例中,在Control的控件模板中,有一个Popup提示框,触发器设置为当鼠标移到控件上时,显示提示框。
但是,我有点不明白的是,当鼠标移开后,提示框为什么没有关闭呢,属性触发器的规则是,当不再满足触发条件时,触发器所更改的属性会自动重置为其旧值,可是这里的Popup的IsOpen为什么没有变为false呢?
------解决方案--------------------
可能wph对IsMouseOver做了优化,因为该动作在不停发生
------解决方案--------------------
StaysOpen="True"
http://msdn.microsoft.com/zh-cn/library/system.windows.controls.primitives.popup.staysopen%28v=vs.110%29.aspx
------解决方案--------------------
MSDN上说
Popup.StaysOpen 属性
1.获取或设置一个值,该值指示当 Popup 控件焦点不再对准时,是否关闭该控件。
2.如果在 IsOpen 属性设置为 false 时关闭 Popup 控件,则为 true;如果在 Popup 控件外发生鼠标或键盘事件时关闭 Popup 控件,则为 false。 默认值为 true。
3.当将 StaysOpen 属性设为 true 时,Popup 始终处于打开状态,直到通过将 IsOpen 属性设置为 false 将其显式关闭。 当 StaysOpen 设置为 false 时,Popup 控件会截获所有鼠标事件和键盘事件,以确定在 Popup 控件之外发生这些事件之一。
还有
默认情况下,Popup.StaysOen属性被设置为True,并且Popup控件会一直显示,直到显式地将IsOpen属性设置为False。如果将Popup.StaysOpen属性设置为False,当用户在其他地方单击鼠标时,Popup控件就会消失。
总之,上面的意思是说,当 Popup.StaysOen = false时,当 Popup 控件焦点不再对准时,就不关闭该控件,只有在当用户在其他地方单击鼠标时,Popup控件就会消失。
所以,你只需要把上述代码中 StaysOpen="False" 去掉就可以了,让它一直=true
<Window x:Class="WPF1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"