首页 > 解决方案 > WPF .Net Framwork 应用程序 - 主菜单下拉菜单在鼠标悬停时立即消失

问题描述

我对这个问题很生气。我有一个窗口,它有一个指定的标准,过去可以正常工作。它有 5 个选项,最右边的 2 个是立即点击操作,而左边的 3 个是单级下拉子菜单。出于某种原因,当我将鼠标从显示它们的顶级菜单中向下移动时,它们就开始消失了。我尝试过的任何事情都不会让它们重新出现。我在这个应用程序中有很多其他 Windows,所有这些都有类似的菜单,并且它们工作正常并且行为正常,只是这个窗口正在执行此操作。

我已经三次检查了 XAML 中菜单代码的语法,它在关闭 V 形等方面与其他窗口相同。

代码是:

... 

<Menu
        Grid.Column="1"
        Grid.Row="1"
        Height="30" 
        HorizontalAlignment="Center"            
        Width="428" Opacity="0.5" FontWeight="Bold" Foreground="{DynamicResource Black0}" IsHitTestVisible="True" Background="{DynamicResource Black2}">
        <Menu.Items>

            <MenuItem  Header="_Linq Queries" 
                    Margin="5"
                     Width="80" 
                    Foreground="{StaticResource White0}">

                <MenuItem Header="A/c Type 1 Only"
                        Background="Red"
                        Click="Linq1_Click"
                        Foreground="White"
                        IsHitTestVisible="True" 
                        IsCheckable="false"/>
                <MenuItem Header="A/c Type 2 Only"
                    Click="Linq2_Click"
                    Foreground="Black"
                    IsHitTestVisible="True" IsCheckable="False" StaysOpenOnClick="True"/>
                <MenuItem Header="A/c Type 3 Only"
                    Click="Linq3_Click"
                    Foreground="Black"
                    IsCheckable="False" StaysOpenOnClick="True"/>
                <MenuItem Header="A/c Type 4 Only"
                    Click="Linq4_Click"
                    Foreground="#FF971F1F"
                    IsCheckable="False" Background="{DynamicResource Gray3}" StaysOpenOnClick="True"/>
                <MenuItem Header="Multi A/C Holders"
                    Click="Linq5_Click"
                    IsCheckable="False"
                    Foreground="Black"/>
                <Separator />
                <MenuItem Header="Show All Records"
                    Click="Linq6_Click"
                    IsCheckable="False"
                    Foreground="Black"/>
            </MenuItem>


            <MenuItem  Header="Filtering" 
                Width="60" 
                    Foreground="{StaticResource White1}">

                <MenuItem  Header="Trigger My Own Command"
                     Command="{Binding myCommandBinding}"
                    FontWeight="DemiBold"
                    Foreground="{StaticResource Black1}"
                    Background="#00FF00"
                    Style="{StaticResource MenuItemGreen}"
                    HorizontalAlignment="Left"
                    HorizontalContentAlignment="Left"
                    Width="290"
                    Margin="2"/>
                <!--<Button Grid.ColumnSpan="2" Grid.Row="4" Command="{Binding InformationCommand}">Info</Button>-->
            </MenuItem>

            <MenuItem  Header="Options" 
                    Click="Options_Click"
                    Width="50" 
                    Foreground="{StaticResource White2}">

                <MenuItem  Header="Export Bank Account Db => CSV"
                    Click="ExportBankCSV_Click"
                    FontWeight="DemiBold"
                    Foreground="{StaticResource Black1}"
                    Background="#00FF00"
                    Style="{StaticResource MenuItemGreen}"
                    HorizontalAlignment="Left"
                    HorizontalContentAlignment="Left"
                    Width="290"
                    Margin="2"/>
                <MenuItem  Header="Export Customers Db => CSV"
                    Click="ExportCustCSV_Click"
                    FontWeight="DemiBold"
                    Foreground="{StaticResource Black1}"
                    Background="#00FF00"
                    Style="{StaticResource MenuItemGreen}"
                    HorizontalAlignment="Left"
                    HorizontalContentAlignment="Left"
                    Width="290"
                    Margin="2"                   />
                <MenuItem  Header="Export Details Db => CSV"
                    Click="ExportDetCSV_Click"
                    FontWeight="DemiBold"
                    Foreground="{StaticResource Black1}"
                    Background="#00FF00"
                    Style="{StaticResource MenuItemGreen}"
                    HorizontalAlignment="Left"
                    HorizontalContentAlignment="Left"
                    Width="290"
                    Margin="2"/>
                <Separator/>
                <MenuItem  Header="Import Bank Account Db from CSV"
                    Click="ImportBankCSV_Click"
                    FontWeight="DemiBold"
                    Background="#FF0000"
                    Foreground="White"
                    Style="{StaticResource MenuItemRed}"
                    HorizontalAlignment="Left"
                    HorizontalContentAlignment="Left"
                    Width="290"
                    Margin="2"
                    />
                <MenuItem  Header="Import Customers Db from CSV"
                    Click="ImportCustCSV_Click"
                    FontWeight="DemiBold"
                    Foreground="White"
                    Background="#FF0000"
                    HorizontalAlignment="Left"
                    HorizontalContentAlignment="Left"
                    Style="{StaticResource MenuItemRed}"
                    Width="290"
                    Margin="2"
                    />
                <MenuItem  Header="Import Details Db from CSV"
                    Click="ImportDetCSV_Click"
                    FontWeight="DemiBold"
                    Foreground="White"
                    Background="#FF0000"
                    HorizontalAlignment="Left"
                    HorizontalContentAlignment="Left"
                    Style="{StaticResource MenuItemRed}"
                    Width="290"
                    Margin="2"
                    />

            </MenuItem>
        </Menu.Items>

我花了 2 天时间在网上搜索解决方案,但大多数问题似乎与网页主菜单有关,而不是 App 样式程序。

我希望有人能发现发生了什么。我尝试了不同的 IsHitTextVisible 设置、Focusable 设置等,没有什么能改变这种令人愤怒的行为?

是的,Emmanuelle,这里的菜单非常相似,但从另一个窗口非常类似于问题窗口,但它工作得很好:

    <!--#region Menu Bar-->
    <Menu           
        Background="Transparent"
        Grid.Column="1"
        Grid.Row="0"
        Height="30" 
        HorizontalAlignment="Left"
        Width="auto">

        <MenuItem  Header="_Linq Queries" 
                Margin="5"
                 Width="80" 
                Foreground="{StaticResource White0}">
            <MenuItem Header="A/c Type 1 Only"
                    Background="#35F6FB" 
                    Click="Linq1_Click"
                    Foreground="Black"
                    IsCheckable="false"/>
            <MenuItem Header="A/c Type 2 Only"
                Background="#35F6FB" 
                Click="Linq2_Click"
                Foreground="Black"
                IsCheckable="False"/>
            <MenuItem Header="A/c Type 3 Only"
                Background="#35F6FB" 
                Click="Linq3_Click"
                Foreground="Black"
                IsCheckable="False"/>
            <MenuItem Header="A/c Type 4 Only"
                Background="#35F6FB" 
                Click="Linq4_Click"
                Foreground="Black"
                IsCheckable="False"/>
            <MenuItem Header="Multi A/C Holders"
                Background="#35F6FB" 
                Click="Linq5_Click"
                IsCheckable="False"
                Foreground="Black"/>
            <Separator />
            <MenuItem Header="Show All Records"
                Background="#35F6FB" 
                Click="Linq6_Click"
                IsCheckable="False"
                Foreground="Black"/>
            <MenuItem Header="Create 'Join' of Bank and Details"
                Background="#35F6FB"
                Click="bankjoin_Click"
                    IsCheckable="false"
            Foreground="Black"/>
        </MenuItem>

        <MenuItem  Header="Filtering" 
            Width="60" 
                Foreground="{StaticResource White1}">

            <MenuItem  Header="Trigger My Own Command"
                 Command="{Binding myCommandBinding}"
                FontWeight="DemiBold"
                Foreground="{StaticResource Black1}"
                Background="#00FF00"
                Style="{StaticResource MenuItemGreen}"
                HorizontalAlignment="Left"
                HorizontalContentAlignment="Left"
                Width="290"
                Margin="2"/>
            <!--<Button Grid.ColumnSpan="2" Grid.Row="4" Command="{Binding InformationCommand}">Info</Button>-->
        </MenuItem>
        
        <MenuItem  Header="Options" 
                Click="Options_Click"
                Width="50" 
                Foreground="{StaticResource White2}">

            <MenuItem  Header="Export Bank Account Db => CSV"
                Click="ExportBankCSV_Click"
                FontWeight="DemiBold"
                Foreground="{StaticResource Black1}"
                Background="#00FF00"
                Style="{StaticResource MenuItemGreen}"
                HorizontalAlignment="Left"
                HorizontalContentAlignment="Left"
                Width="290"
                Margin="2"/>
            <MenuItem  Header="Export Customers Db => CSV"
                Click="ExportCustCSV_Click"
                FontWeight="DemiBold"
                Foreground="{StaticResource Black1}"
                Background="#00FF00"
                Style="{StaticResource MenuItemGreen}"
                HorizontalAlignment="Left"
                HorizontalContentAlignment="Left"
                Width="290"
                Margin="2"                   />
            <MenuItem  Header="Export Details Db => CSV"
                Click="ExportDetCSV_Click"
                FontWeight="DemiBold"
                Foreground="{StaticResource Black1}"
                Background="#00FF00"
                Style="{StaticResource MenuItemGreen}"
                HorizontalAlignment="Left"
                HorizontalContentAlignment="Left"
                Width="290"
                Margin="2"/>
            <Separator/>
            <MenuItem  Header="Import Bank Account Db from CSV"
                Click="ImportBankCSV_Click"
                FontWeight="DemiBold"
                Background="#FF0000"
                Foreground="White"
                Style="{StaticResource MenuItemRed}"
                HorizontalAlignment="Left"
                HorizontalContentAlignment="Left"
                Width="290"
                Margin="2"
                />
            <MenuItem  Header="Import Customers Db from CSV"
                Click="ImportCustCSV_Click"
                FontWeight="DemiBold"
                Foreground="White"
                Background="#FF0000"
                HorizontalAlignment="Left"
                HorizontalContentAlignment="Left"
                Style="{StaticResource MenuItemRed}"
                Width="290"
                Margin="2"
                />
            <MenuItem  Header="Import Details Db from CSV"
                Click="ImportDetCSV_Click"
                FontWeight="DemiBold"
                Foreground="White"
                Background="#FF0000"
                HorizontalAlignment="Left"
                HorizontalContentAlignment="Left"
                Style="{StaticResource MenuItemRed}"
                Width="290"
                Margin="2"
                />

        </MenuItem>

        <MenuItem  Header="Drag / Drop"
            Click="Drag_Click"
             IsTabStop="False"
            Width="81"
            Foreground="{StaticResource White1}">
        </MenuItem>


        <MenuItem  Header="Close Viewer..."
                Click="Exit_Click"
                 FontWeight="SemiBold"
                 Margin="2,0"
                Width="97"
                Foreground="{StaticResource White1}"/>
    </Menu>

我什至已经将工作窗口中的菜单复制到这个相同的结果中,所以它似乎不是菜单代码?

我的窗户是这样的——

<Window x:Class="WPFPages.SqlDbViewer"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  xmlns:data="clr-namespace:WPFPages"
  mc:Ignorable="d"
  DataContext="{Binding RelativeSource={RelativeSource Self}}"
    MinHeight="450"
    MinWidth="867"
    Loaded="OnWindowLoaded" 
    PreviewKeyDown="Window_PreviewKeyDown"
    Title="Database Edit/View Utility" 
    Height="450" Width="867"
    WindowStartupLocation="CenterScreen"
    Closed="Window_Closed"
    WindowStyle="ThreeDBorderWindow">

里面没有什么奇怪的??

我刚刚注意到,通过使用放大镜,我可以将鼠标放在 PopUpRow 本身的封闭矩形上,只要我触摸到实际的 MenuItem,它就会消失。所以是 MenuItem 敏感并导致整个弹出窗口关闭

更奇怪的是,通过在项目之外非常小心地将光标向下移动到菜单的一侧,我发现我可以将鼠标悬停在分隔符上,但不能悬停任何项目。!

最后,我尝试注释掉选项菜单前 3 项中使用的整个菜单项样式 MenuItemGreen,但它根本没有区别。我只是不知道这里发生了什么?

我不确定您想查看哪些资源?如上所述,我已经注释掉了这个特定文件中的所有菜单/菜单样式等,其他资源(菜单颜色,如 MenuItemGreen)都被其他具有完全工作菜单的窗口使用,所以我怀疑它们不能只影响这个窗口?

我刚刚从这个窗口的整个菜单系统中删除了所有 <Style and Background/foreground {Staticresource},但它仍然无法正常工作。它们现在只是贯穿始终的基本菜单命令,但仍然没有运气

请澄清还有什么可以帮助你?

这是一个好的和坏的菜单是什么样子的? 在此处输入图像描述

在此处输入图像描述

标签: wpfmenudropdown

解决方案


推荐阅读