C# 当鼠标指向窗口顶部位置时,如何触发事件?

C# 当鼠标指向窗口顶部位置时,如何触发事件?,c#,.net,wpf,windows,xaml,C#,.net,Wpf,Windows,Xaml,您好,我正在开发一个WPF应用程序,我需要在窗口顶部显示一个DockPanel,但它只会显示鼠标是否指向该位置(与Windows 8.1标题栏完全相同,如果鼠标指向顶部,则会出现交叉按钮和最小化按钮),如果鼠标移到窗口外侧和其他位置,子元素将覆盖整个窗口并显示数据,但每当鼠标指向UI的顶部位置时,我都会显示标题。我附上了一张我的想法的图片。有人能提出建议吗 在谷歌搜索了很多次之后,我发现获得屏幕分辨率并从窗口的高度和宽度中减去会得到我想要的结果。但我认为这不是最终的解决办法,必须有其他办法 正如

您好,我正在开发一个WPF应用程序,我需要在窗口顶部显示一个
DockPanel
,但它只会显示鼠标是否指向该位置(与Windows 8.1标题栏完全相同,如果鼠标指向顶部,则会出现交叉按钮和最小化按钮),如果鼠标移到窗口外侧和其他位置,子元素
将覆盖整个窗口并显示数据,但每当鼠标指向UI的顶部位置时,我都会显示标题。我附上了一张我的想法的图片。有人能提出建议吗

在谷歌搜索了很多次之后,我发现获得屏幕分辨率并从窗口的高度和宽度中减去会得到我想要的结果。但我认为这不是最终的解决办法,必须有其他办法

正如我建议的那样,我试过这种方法

<Grid x:Name="gdMainWindow" >
        <Grid.RowDefinitions>
            <RowDefinition Height="20" />
            <RowDefinition Height="*" />
 </Grid.RowDefinitions>

 <Rectangle Grid.Row="0" Fill="Transparent" Height="20" 
     MouseEnter="Dock_MouseEnter" 
     MouseLeave="dp_MouseLeave"            
 />

<DockPanel Grid.Row="0" Background="Black"  >
    <Image Source="Images/candle-blownout.jpg" Stretch="UniformToFill"/>
</DockPanel >

但它将顶部的20像素空间保留为白色,图像不会调整到第一行。

您可以执行以下操作:

<Grid>
     <Grid.RowDefinitions>
          <RowDefinition Height="20"/>
          <RowDefinition Height="*"/>
     </Grid.RowDefinitions>
     <Rectangle x:Name="TopPart" MouseEnter="MouseEnterEvent" MouseLeave="MouseLeaveEvent" Fill="Transparent" Grid.Row="0" />
    <StackPanel x:Name="RestOfContent" Grid.Row="0" Grid.RowSpan="2/>
</Grid>


当我这样做的时候,我只是在顶部像一个5px的矩形一样抛出一个Fill=Transparent的hittestvisibility和一个mousenter-eventtrigger,使你的菜单在它上面可见,然后在菜单上有一个MouseLeave触发器再次折叠它。我会放弃你的行定义,并以不同的方式处理它,这样顶部就不会有很大的奇怪间隙。也许我应该发布一个牙齿,因为两个元素都从同一行(0)开始,所以不应该有间隙。哦,我明白了,是的,我没有看到,我不想麻烦把行=0,所以当我出于习惯看到它时,我认为它意味着另一行。很公平:)我试着按照你的建议去做,但它把20像素的像素作为白色背景。图像未调整大小以覆盖第一行。
<Grid>
     <Grid.RowDefinitions>
          <RowDefinition Height="20"/>
          <RowDefinition Height="*"/>
     </Grid.RowDefinitions>
     <Rectangle x:Name="TopPart" MouseEnter="MouseEnterEvent" MouseLeave="MouseLeaveEvent" Fill="Transparent" Grid.Row="0" />
    <StackPanel x:Name="RestOfContent" Grid.Row="0" Grid.RowSpan="2/>
</Grid>