首页 > 解决方案 > 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();
}

这里的问题显示在屏幕截图中。wpf 导航面板

在面板上导​​航时,它必须出现在所有子窗口的最顶部,以便轻松切换到另一个窗口(就像菜单栏一样)。我怎样才能做到这一点?

标签: c#.netwpfwindowsxaml

解决方案


好的,我找到了解决方案。

我刚刚为上面的代码添加了一个父级<Popup>,它按预期工作。现在当子窗口有一个属性时它也可以工作Topmost=true

代码现在看起来像:

<Popup
  IsOpen="True"
  StaysOpen="True"
  Placement="Relative"
  Grid.Row="1"
  >

  <!-- // Grid named st_pnl -->

</Popup>

推荐阅读