Wpf 如何以编程方式将UserControl设置为最顶层?
如何以编程方式将UserControl设置为pc屏幕的最上方。我的wpf应用程序中有多个usercontrol,当我调整任何usercontrol的大小时,我想在屏幕顶部显示此usercontrol。这取决于您在哪个容器中使用它。或者在什么情况下。基本上,在网格中,您只需要将其指定为网格容器下的最后一个元素。否则,在XAML中的UserControl声明上使用Panel.ZIndex=1 我想在屏幕顶部显示这个用户控件 如果您指的是应用程序内屏幕的顶部,那么这是通过使用附加属性实现的 Xaml: 代码隐藏:Wpf 如何以编程方式将UserControl设置为最顶层?,wpf,Wpf,如何以编程方式将UserControl设置为pc屏幕的最上方。我的wpf应用程序中有多个usercontrol,当我调整任何usercontrol的大小时,我想在屏幕顶部显示此usercontrol。这取决于您在哪个容器中使用它。或者在什么情况下。基本上,在网格中,您只需要将其指定为网格容器下的最后一个元素。否则,在XAML中的UserControl声明上使用Panel.ZIndex=1 我想在屏幕顶部显示这个用户控件 如果您指的是应用程序内屏幕的顶部,那么这是通过使用附加属性实现的 Xaml:
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:
看,您想将UserControl设置为最顶层还是包含UserControl的窗口??
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>
<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;
}
}
<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>