C# 弹出窗口的几个问题(不隐藏)

C# 弹出窗口的几个问题(不隐藏),c#,wpf,C#,Wpf,我做了一个小的测试应用程序来说明我不理解的行为:2个按钮,如果鼠标进入左键,弹出窗口显示(工作),如果鼠标进入右键,弹出窗口应该立即消失(不工作)。在我的实际应用程序中,我没有按钮,只是在这个简单测试的示例中,所以鼠标移动很重要,不能使用按钮单击 我看到的是以下行为: 如果显示弹出窗口,则鼠标右键输入(隐藏)根本没有反应,似乎弹出窗口已获得焦点,我必须在启用鼠标右键输入之前单击主窗口。设置Popup.Focusable=false(XAML)或在设置Popup.Isopen=true之后尝试将

我做了一个小的测试应用程序来说明我不理解的行为:2个按钮,如果鼠标进入左键,弹出窗口显示(工作),如果鼠标进入右键,弹出窗口应该立即消失(不工作)。在我的实际应用程序中,我没有按钮,只是在这个简单测试的示例中,所以鼠标移动很重要,不能使用按钮单击

我看到的是以下行为:

  • 如果显示弹出窗口,则鼠标右键输入(隐藏)根本没有反应,似乎弹出窗口已获得焦点,我必须在启用鼠标右键输入之前单击主窗口。设置Popup.Focusable=false(XAML)或在设置Popup.Isopen=true之后尝试将焦点赋予网格(C#代码)没有帮助
  • 一旦我试图通过设置popup.IsOpen=false来隐藏弹出窗口,弹出窗口将保持可见且不会消失。只有当我单击主窗口顶栏时,或者当我悬停最小化按钮(例如,显示工具提示)时,弹出窗口才会突然消失。对多个UI元素调用UpdateLayout()没有帮助
我想要以下内容:

  • 显示弹出窗口后,隐藏按钮仍应在鼠标输入时作出反应
  • 设置Popup.IsOpen=false会直接让弹出窗口消失
  • 请参见下面的代码XAML:

    <Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication1"
        mc:Ignorable="d"
        x:Name="MyWindow"
        Title="MainWindow" Height="500" Width="800">
    <Grid>
        <Grid x:Name="MyGrid" Margin="100" Background="Green">
    
            <TextBox x:Name="MyText" Width="100" Height="50" Margin="0,50" HorizontalAlignment="Center"></TextBox>
    
            <Button Width="75" Height="50" Margin="20,100" HorizontalAlignment="Left"
                    Content="Show" MouseEnter="MouseEnterShow"></Button>
            <Button Width="75" Height="50" Margin="20,100" HorizontalAlignment="Right"
                    Content="Hide" MouseEnter="MouseEnterHide"></Button>
    
            <Popup x:Name="MyPopup" PlacementTarget="{Binding ElementName=MyGrid}" Placement="RelativePoint"
                   AllowsTransparency="false" IsOpen="False" StaysOpen="False"
                   Focusable="False"
                   Width="200" Height="200"                   
                   HorizontalAlignment="Left" VerticalAlignment="Top"
                   HorizontalOffset="-50" VerticalOffset="-50">
                <Grid>
                    <Canvas Background="BlanchedAlmond" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></Canvas>
                </Grid>
            </Popup>
        </Grid>
    </Grid>
    </Window>
    

    经过一些野蛮的强迫,我终于成功了:

    1.将弹出属性StaysOpen设置为true,而不是false

    2.代码隐藏

    private void MouseEnterShow(object sender, MouseEventArgs e)
    {
        MyPopup.IsOpen = true;
    }
    
    private void MouseEnterHide(object sender, MouseEventArgs e)
    {
        MyPopup.IsOpen = false;
    }
    

    经过一些野蛮的强迫,我终于成功了:

    1.将弹出属性StaysOpen设置为true,而不是false

    2.代码隐藏

    private void MouseEnterShow(object sender, MouseEventArgs e)
    {
        MyPopup.IsOpen = true;
    }
    
    private void MouseEnterHide(object sender, MouseEventArgs e)
    {
        MyPopup.IsOpen = false;
    }
    

    这是向前迈出的一步,谢谢。当弹出窗口显示时,在隐藏按钮上输入鼠标确实会做出响应,但由于某种原因,在“popup.IsOpen=false”之后,弹出窗口仍然可见,直到我单击主窗口顶部栏或将鼠标悬停在最小化按钮上。奇怪的是,一旦我设置了“AllowTransparency=”true“,现在似乎可以工作了。但我不明白这背后的理由…这是向前迈出的一步,谢谢。当弹出窗口显示时,在隐藏按钮上输入鼠标确实会做出响应,但由于某种原因,在“popup.IsOpen=false”之后,弹出窗口仍然可见,直到我单击主窗口顶部栏或将鼠标悬停在最小化按钮上。奇怪的是,一旦我设置了“AllowTransparency=”true“,现在似乎可以工作了。但我不明白这背后的理由。。。