您好,我正在开发一个WPF应用程序,我需要在窗口的顶部显示一个DockPanel
,但它只会显示如果鼠标指向该位置,(正如Windows 8.1标题栏,如果您将鼠标指向顶部,跨button和最小化button来),如果鼠标移动到窗口的一侧,而在其他地方,子元素<StackPanel>
将覆盖整个窗口并显示数据,但是只要鼠标指向UI的顶部位置,I应该显示标题。 我附上了我的想法的图像。 有人可以提出一些build议吗?
经过大量的谷歌search,我发现获得屏幕分辨率和从窗口的高度和宽度减去会给我的欲望的结果。 但是我认为这不是最终的解决办法,一定有其他办法。
如build议我这样试了
<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 >
并在Dock_MouseEnter
private void Dock_MouseEnter ( object sender, MouseEventArgs e ) { dp.Visibility = Visibility.Visible; } private void dp_MouseLeave ( object sender, MouseEventArgs e ) { dp.Visibility = Visibility.Collapsed; }
但是,它将顶部的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>
这是一个伪XAML,所以要注意一些属性的命名可能略有不同。
你创建一个有两行的Grid
,第一个是你想要的反应顶部的尺寸,第二个是其余的。
在第一个Grid.Row
您设置了一个Rectangle
,或者另一个透明元素,您只需在鼠标进入或离开时检测它们,处理相关的事件。 其余的内容将被放置在同一个Grid.Row
,但是将会有一个RowSpan
,它可以让它延伸到窗口的其余部分。
如果你对这种方法有ZIndex
,那么IE的Rectangle
与一些不允许你进行交互的内容重叠,你需要用组件的ZIndex
稍微玩一下,同时确保你使用这个作为顶部您的窗口,以便Rectangle
不会向下滚动。