首页 > 解决方案 > 将 UserControl 放在 Window Foreground 前面

问题描述

在我的 WPF 应用程序中,我有一个MainWindow,如果单击一个按钮,则会UserControl打开。我希望前景MainWindow是黑色的(有一些不透明度)。到目前为止一切顺利,我设法做到了。但正如在其前景中UserControl显示的一样。MainWindow所以我想知道如何让 UC 处于领先地位,从而保持其前景。

这就是 UC 在 MainWindow 中的使用方式

<local:PopUp
            x:Name="popUp"
            Grid.Row="0"
            Grid.RowSpan="3"
            Grid.Column="1"
            Grid.ColumnSpan="2"
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            Visibility="Hidden"/>

这是注意到按钮单击的部分,出现弹出窗口(UC)并且应该更改前景。

private void Add_Click(object sender, RoutedEventArgs e)
{
    pop.Visibility = Visibility.Visible;
    this.Foreground = Brushes.Black;
    this.Opacity = 0.1;
}

标签: c#wpfxaml

解决方案


您的 usercontroll 被命名为 popUp 并且在您调用 pop 的按钮单击事件中可见。这可能是一个错字。

一般来说:如果你想让一个 UIelement 在其他 UIelements 之上,你只需要确保它是同一个容器中的最后一个 UIelement。

两个彩色网格的正确顺序示例和同一个网格中的一个按钮。(您可以玩这个并更改顺序几次以查看效果。)XAML:

 <Grid x:Name="ContainerGridForAllthreeUIElements">
    <Grid x:Name="BlueGrid" Background="Blue"/>
    <Grid x:Name="RedGrid" Background="Red" Visibility="Collapsed" Margin="40">
        <Viewbox>
            <TextBlock Text=" I'll be back" Margin="10"/>
        </Viewbox>            
    </Grid>
    <Button 
        x:Name="Button_Toggle" 
        Content="Click to toggle"
        Click="Button_Toggle_Click" 
        HorizontalAlignment="Center"
        VerticalAlignment="Center"/>
</Grid>

后面的代码:

private void Button_Toggle_Click(object sender, RoutedEventArgs e)
    {
        if(RedGrid.Visibility == Visibility.Collapsed)
        {
            RedGrid.Visibility = Visibility.Visible;
            BlueGrid.Opacity = 0.4;
        }
        else
        {
            BlueGrid.Opacity = 1;
            RedGrid.Visibility = Visibility.Collapsed;
        }
    }

快乐编码。


推荐阅读