问题描述
如果我还有头发,到现在我已经把它拔了。我使用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上找到了这一点。这就是我的解决办法。