如何以编程方式将UserControl设置为Topmost?

时间:2015-07-24 11:37:22

标签: wpf

如何以编程方式将UserControl设置为PC屏幕的最顶层。我在我的wpf应用程序中有多个usercontrol,当我调整任何usercontrol的大小时,我想在屏幕顶部显示这个usercontrol。

2 个答案:

答案 0 :(得分:0)

这取决于您使用它的容器。或者在什么情况下。基本上在Grid中,您只需将其指定为Grid容器下的最后一个元素。否则,在XAML中的UserControl声明中使用Panel.ZIndex="1"

答案 1 :(得分:0)

  

我想在屏幕顶部显示此用户控件。

如果您的意思是“应用程序内部的屏幕顶部”,那么可以通过使用Panel's ZIndex附加属性来实现。

Xaml:

<Grid x:Name="LayoutRoot">
        <UserControl x:Name="TopMostUserControl"
                     Margin="10,140,106,48"
                     Panel.ZIndex="1"
                     Background="Green" />

        <UserControl x:Name="SecondUserControl"
                     Margin="39,50,37,87"
                     Panel.ZIndex="0"
                     Background="red" />
    </Grid>

C#:

public MainWindow()
        {
            InitializeComponent();
            Panel.SetZIndex(TopMostUserControl, 1);
            Panel.SetZIndex(SecondUserControl, 0);
        }


<Grid x:Name="LayoutRoot">
            <UserControl x:Name="TopMostUserControl"
                         Margin="10,140,106,48"
                         Background="Green" />

            <UserControl x:Name="SecondUserControl"
                         Margin="39,50,37,87"
                         Background="red" />
        </Grid>

结果:

enter image description here

但是,如果您的意思是在整个屏幕上最重要的UserControl,那么这将是不同的,您应该创建另一个托管最顶级UserControl的窗口,并且您应该在调整大小时将其TopMost属性更改为true你的其他UserControls。

MainWindow:

<Grid x:Name="LayoutRoot">
        <UserControl x:Name="FirstUserControl"
                     Margin="10,140,106,48"
                     Background="Green"
                     MouseDown="FirstUserControl_OnMouseDown" />

        <UserControl x:Name="SecondUserControl"
                     Margin="39,50,37,87"
                     Background="red" />
    </Grid>

代码背后:

public partial class MainWindow : Window
        {
            public TopMostWindow TopMostWindow;
            public MainWindow()
            {
                InitializeComponent();
                TopMostWindow = new TopMostWindow();
                TopMostWindow.Show();

            }

            private void FirstUserControl_OnSizeChanged(object sender, SizeChangedEventArgs e)
            {
                TopMostWindow.Topmost = true;
            }

            private void MainWindow_OnContentRendered(object sender, EventArgs e)
            {
                FirstUserControl.SizeChanged += FirstUserControl_OnSizeChanged;
                SecondUserControl.SizeChanged += FirstUserControl_OnSizeChanged;
            }


            //This is to simulate the resizing 

            private void FirstUserControl_OnMouseDown(object sender, MouseButtonEventArgs e)
            {
                FirstUserControl.Width = 400;
            }
        }

TopMostWindow:

<Window x:Class="MvvmLight1.TopMostWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="TopMostWindow"
        Width="300"
        Height="300"
        Topmost="False"
        WindowStyle="None">
    <Grid>
        <UserControl x:Name="TopMostUserControl" Background="Blue" />
    </Grid>
</Window>