MouseEnter 和 MouseLeave 使按钮在不应隐藏时消失
MouseEnter and MouseLeave makes buttons disappear when they shouldn't be hidden
如果我还有头发,我早就拔掉了。我对 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”时,4 个按钮确实出现了,控件保持“打开”状态。
如果我将光标向上移动到“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 越来越好,但我仍然 运行 遇到像这样的奇怪问题。
编辑:它与自定义控件中对象之间的透明背景有关。一时兴起,我将顶部堆栈面板的背景设置为黑色,现在控件可以工作了;我可以在不丢失按钮的情况下自由移动鼠标。但是,我真的很想在控件中有透明背景...
我有一个由 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”时,4 个按钮确实出现了,控件保持“打开”状态。
如果我将光标向上移动到“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 上找到了这个。这就是为我修复它的原因。