MouseEnter和MouseLeave使按钮在不应该隐藏的情况下消失

问题描述

如果我还有头发,到现在我已经把它拔了。我使用WPF变得更好,但是我仍然遇到像这样的奇怪问题。

编辑:它与自定义控件中对象之间的透明背景有关。一时兴起,我将顶部堆栈面板上的背景设置为黑色,并且控件现在可以正常工作了;我可以自由移动鼠标而不会丢失按钮。但是,我真的很想在控件中使用透明背景...

我有一个包含4个按钮,一个文本块和一个独立图像的用户控件。这是我用于控件的XAML:

<Border BorderBrush="Transparent" MouseEnter="StackPanel_MouseEnter" MouseLeave="StackPanel_MouseLeave">
    <StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center">

        <StackPanel Orientation="Horizontal" Height="25" VerticalAlignment="Center" HorizontalAlignment="Center" >
        
            <Button Name="btnAdd" HorizontalAlignment="Center" Background="Transparent"   HorizontalContentAlignment="Left" ToolTip="PrevIoUs" Click="btnAdd_Click" 
                    BorderBrush="Transparent" >
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
                    <Image Source="/Images/add.png" VerticalAlignment="Center" HorizontalAlignment="Center" Name="imgAdd" Width="25" Height="25"></Image>
                    <TextBlock Background="Transparent" Foreground="AntiqueWhite" VerticalAlignment="Center" Width="25">Add</TextBlock>
                </StackPanel>
            </Button>

            <Button Name="btnEdit" HorizontalAlignment="Center" Background="Transparent"   HorizontalContentAlignment="Left" ToolTip="PrevIoUs"
                    Click="btnAdd_Click" BorderBrush="Transparent"  >
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
                    <Image Source="/Images/edit.png" VerticalAlignment="Center" HorizontalAlignment="Center" Name="imgEdit" Width="25" Height="25"></Image>
                    <TextBlock Background="Transparent" Foreground="AntiqueWhite" VerticalAlignment="Center" Width="25">Edit</TextBlock>
                </StackPanel>
            </Button>
    
        </StackPanel>


        <StackPanel Orientation="Horizontal" Height="30" >

            <Button Name="btnPrevIoUs" HorizontalAlignment="Left" Background="Transparent"   HorizontalContentAlignment="Left" ToolTip="PrevIoUs" Click="btnPrevIoUs_Click" BorderBrush="Transparent" >
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
                    <Image Source="/Images/PrevIoUs25px.png" VerticalAlignment="Center" HorizontalAlignment="Center" Name="imgPrevIoUs" Width="25" Height="25"></Image>
                </StackPanel>
            </Button>
        
                <TextBlock Name="tblkUserType" Background="Transparent" Foreground="AntiqueWhite"  HorizontalAlignment="Center" VerticalAlignment="Center" Width="90" >Usertype</TextBlock>
        
            <Button Name="btnNext" HorizontalAlignment="Left" Background="Transparent"   HorizontalContentAlignment="Left" ToolTip="PrevIoUs" Click="btnNext_Click" BorderBrush="Transparent">
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
                    <Image Source="/Images/Next25px.png" VerticalAlignment="Center" HorizontalAlignment="Center" Name="imgNext" Width="25" Height="25"></Image>
                </StackPanel>
            </Button>

        </StackPanel>

    <Image Source="/Images/logo50px.png" Height="50" Width="50" ></Image>

</StackPanel>
</Border>

我在边框中添加了进一步测试功能,之前我在顶部具有MouseEnter和MouseLeave事件。

MouseEnter和MouseLeave背后的代码如下:

    private void StackPanel_MouseEnter(object sender,MouseEventArgs e)
    {
        btnNext.Visibility = Visibility.Visible;
        btnPrevIoUs.Visibility = Visibility.Visible;
        btnAdd.Visibility = Visibility.Visible;
        btnEdit.Visibility = Visibility.Visible;
        //Debug.WriteLine("mouseEnter");
    }

    private void StackPanel_MouseLeave(object sender,MouseEventArgs e)
    {
        btnNext.Visibility = Visibility.Hidden;
        btnPrevIoUs.Visibility = Visibility.Hidden;
        btnAdd.Visibility = Visibility.Hidden;
        btnEdit.Visibility = Visibility.Hidden;
        //Debug.WriteLine("mouseLeave");
    }

当我将鼠标悬停在控件上时,我希望按钮弹出/显示应该发生什么。

发生的事情是,当我将鼠标悬停在自定义控件上并且导航到“ btnNext”或“ btnPrevIoUs”时,这四个按钮确实出现了。

如果我将光标向上移动到“ btnAdd”或“ btnEdit”的大约一半,则按钮会消失,因为触发了MouseLeave事件。但是,所有这些对象都在包含MouseEnter和MouseLeave的同一堆栈面板下。

如果我转到btnNext或btnPrevIoUs,则可以转到按钮,然后将鼠标对角线移动到btnAdd或btnEdit。但是我不能直接使用tblkUserType。

我正在尝试解决一个原始问题,即上按钮的1/2方式和按钮会闪烁。当我在此处添加height =“ 25”时,此问题已“修复”:

  <StackPanel Orientation="Horizontal" Height="25" >

但是随后我至少可以继续操作并按到按钮,但是观看所有闪烁的内容却很痛苦。

我不知道为什么会发生这种情况,甚至不知道要搜索什么来找到有相同问题的人...

我需要能够从tblkUserType进入btnAdd和btnEdit。我想我错误地假设了StackPanel(或边框)中的所有内容都可以在该范围内使用MouseEnter和MouseLeave进行操作,但是我不了解。

解决方法

在发现透明背景似乎正在影响StackPanel之后,我终于在SO上找到了这一点。这就是我的解决办法。

WPF Button Background Transparency on Mouse Over

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...