c# - WPF Grid Panel.ZIndex 设置为 1 在另一个窗口的情况下不起作用
问题描述
我正在 WPF 中构建一个应用程序,我想显示一个导航堆栈面板,使其始终出现在每个其他子窗口的顶部,就像菜单栏的功能一样。
我的 MainWindow.xaml 在网格中有此代码。
<!--// Navigation Panel //-->
<Grid
x:Name="nav_pnl"
HorizontalAlignment="Left"
Width="65"
Background="#2E333A"
Panel.ZIndex="1"
>
<StackPanel
x:Name="st_pnl"
>
<Grid
Background="#FF225277"
Height="100"
>
<TextBlock
Grid.Row="1"
Grid.Column="0"
Margin="73,-20,0,0"
Text="COMPANY"
Foreground="White"
FontSize="22"
Background="Transparent"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Style="{StaticResource styl_tb_font1}"
>
</TextBlock>
<ToggleButton
x:Name="Tg_Btn"
Grid.Column="0"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Margin="18,-20,0,0"
Height="30"
Width="30"
>
<ToggleButton.Background>
<ImageBrush
ImageSource="Assets/tgBtn_default.png"
Stretch="None"
/>
</ToggleButton.Background>
</ToggleButton>
</Grid>
<!--// ListView with menu list items //-->
<ListView
x:Name="LV"
Background="Transparent"
BorderBrush="Transparent"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
>
<ListViewItem
HorizontalAlignment="Left"
Margin="0,0,0,15"
PreviewMouseLeftButtonUp="Dashboard__Click"
IsSelected="True"
>
<StackPanel
Orientation="Horizontal"
Width="230"
>
<Image
Source="Assets/ico_dashbrd.ico"
Stretch="Fill"
Width="30"
Height="30"
Margin="12,0,0,0"
/>
<TextBlock
Text="Dashboard"
Margin="25,0,0,0"
Style="{StaticResource styl_tb_font1}"
/>
</StackPanel>
</ListViewItem>
<ListViewItem
HorizontalAlignment="Left"
Margin="0,0,0,15"
>
<StackPanel
Orientation="Horizontal"
Width="230"
>
<Image
Source="Assets/icon2.ico"
Stretch="Fill"
Width="30"
Height="30"
Margin="12,0,0,0"
/>
<TextBlock
Text="Preference"
Margin="25,0,0,0"
Style="{StaticResource styl_tb_font1}"
/>
</StackPanel>
</ListViewItem>
<ListViewItem
HorizontalAlignment="Left"
Margin="0,0,0,15"
>
<StackPanel
Orientation="Horizontal"
Width="230"
>
<Image
Source="Assets/icon3.ico"
Stretch="Fill"
Width="30"
Height="30"
Margin="12,0,0,0"
/>
<TextBlock
Text="Sign Out"
Margin="25,0,0,0"
Style="{StaticResource styl_tb_font1}"
/>
</StackPanel>
</ListViewItem>
</StackPanel>
</Grid>
单击仪表板会打开一个单独的窗口。这是cs代码:
private void Dashboard__Click(object sender, MouseButtonEventArgs e)
{
Window1 wndw1 = new Window1();
wndw1.Owner = this;
wndw1.Show();
}
在面板上导航时,它必须出现在所有子窗口的最顶部,以便轻松切换到另一个窗口(就像菜单栏一样)。我怎样才能做到这一点?
解决方案
好的,我找到了解决方案。
我刚刚为上面的代码添加了一个父级<Popup>
,它按预期工作。现在当子窗口有一个属性时它也可以工作Topmost=true
。
代码现在看起来像:
<Popup
IsOpen="True"
StaysOpen="True"
Placement="Relative"
Grid.Row="1"
>
<!-- // Grid named st_pnl -->
</Popup>
推荐阅读
- java - Java - Maven 测试/单元测试在运行整个包时通过,但在单独运行测试时失败
- c# - ReportViewer 内存泄漏,但如何访问 ReportPanel?
- ruby-on-rails - 在 Rails 上导入 CSV 期间未知属性“标题 ...”
- mysql - Laravel 在同一个请求中创建和更改数据库
- javascript - 如何将所有按顺序排列的元素与由分隔符类分隔的同一类分组?
- spring - Spring:添加安全依赖无法启动Tomcat
- import - Neo4j - 不是链的一部分!关系遍历光标
- angular - 如何从 http 中读取对象(基本上是 Json 数据),获取角度 6
- sockets - FTP 客户端从服务器接收到错误的端口
- scala - Play 2.6 表示使用已弃用的 Slick 类