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

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

<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>

WPF,见见这个提示框与触发器
上例中,在Control的控件模板中,有一个Popup提示框,触发器设置为当鼠标移到控件上时,显示提示框。
但是,我有点不明白的是,当鼠标移开后,提示框为什么没有关闭呢,属性触发器的规则是,当不再满足触发条件时,触发器所更改的属性会自动重置为其旧值,可是这里的Popup的IsOpen为什么没有变为false呢?
------解决方案--------------------
可能wph对IsMouseOver做了优化,因为该动作在不停发生
------解决方案--------------------
StaysOpen="True"
引用
当将 StaysOpen 属性设为 true 时,Popup 始终处于打开状态,直到通过将 IsOpen 属性设置为 false 将其显式关闭。 当 StaysOpen 设置为 false 时,Popup 控件会截获所有鼠标事件和键盘事件,以确定在 Popup 控件之外发生这些事件之一。 

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"