C# MouseEnter和MouseLeave使按钮在不应隐藏时消失

C# MouseEnter和MouseLeave使按钮在不应隐藏时消失,c#,wpf,wpf-controls,C#,Wpf,Wpf Controls,如果我还有头发的话,我现在已经把它拔出来了。我在WPF方面做得越来越好,但我仍然遇到像这样的奇怪问题 编辑:它与自定义控件中对象之间的透明背景有关。一时兴起,我将顶部stackpanel上的背景设置为黑色,控件现在可以工作了;我可以自由地移动鼠标而不丢失按钮。但是,我真的希望控件中有透明的背景 我有一个用户控件,它由4个按钮、一个文本块和一个独立的图像组成。这是我的控件的XAML: <Border BorderBrush="Transparent" MouseEnter

如果我还有头发的话,我现在已经把它拔出来了。我在WPF方面做得越来越好,但我仍然遇到像这样的奇怪问题

编辑:它与自定义控件中对象之间的透明背景有关。一时兴起,我将顶部stackpanel上的背景设置为黑色,控件现在可以工作了;我可以自由地移动鼠标而不丢失按钮。但是,我真的希望控件中有透明的背景

我有一个用户控件,它由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>
当我将鼠标悬停在我希望按钮弹出/显示的控件上时,应该发生什么

当我将鼠标悬停在自定义控件上,并导航到btnNext或btnPrevious控件保持打开状态时,会出现4个按钮

如果我将光标向上移动到btnAdd或btnEdit大约一半,按钮将消失,因为MouseLeave事件被触发。但是,所有这些对象都位于包含MouseEnter和MouseLeave的同一stackpanel下

如果我转到btnNext或btnPrevious,然后将鼠标对角移动到btnAdd或btnEdit,我可以使用这些按钮。但是我不能直接从tblkUserType开始

我试图修复一个原来的问题,即1/2的方式向上按钮和按钮会闪烁开/关。当我在这里添加高度=25时,这是固定的:

  <StackPanel Orientation="Horizontal" Height="25" >
但我至少可以继续向上走,走到按钮前,但看着这些闪烁的灯光,我感到很痛苦

我不知道为什么会发生这种情况,也不知道要搜索什么才能找到有同样问题的人


我需要能够从tblkUserType访问btnAdd和btnEdit。我猜我错误地假设StackPanel或边框内的所有内容都会在该覆盖范围内使用MouseEnter和MouseLeave,但我不明白什么。

在发现透明背景似乎影响StackPanel后,我终于发现这一点。这就是为我修好的


这不是答案,但在对XAML做一个简短的了解后,我建议您一般应该告知一些事情。一些相同的控件(例如,具有相同的背景、高度等)使用样式。使标记可读,并且更容易在一个位置更改外观。此外,在代码隐藏中使用ViewModel,在XAML中使用绑定,例如控制可见性。在场景中,这是ViewModel中所有按钮绑定到的唯一可见性属性。然后单击事件,阅读有关命令的信息,这些命令反过来会更改ViewModel。一切都让生活变得简单:祝你好运。我只是在学习WPF,我对你说的很感兴趣,但我不完全理解你的评论,尤其是关于命令的?我正在使用MVM设计模式。。。在我的其他控件中,我在设计器中设计了许多控件项之后,将它们移动到代码中。使用designer界面更容易处理问题,使其正常工作
  <StackPanel Orientation="Horizontal" Height="25" >