我有一个主窗口
<Window >
<Canvas x:Name="topCanvas" Background="Black">
<Grid x:Name="mainGrid" Width="{Binding ElementName=topCanvas, Path=ActualWidth}" Height="{Binding ElementName=topCanvas, Path=ActualHeight}">
</Grid>
<Canvas
Width="{Binding ElementName=topCanvas, Path=ActualWidth}"
Height="{Binding ElementName=topCanvas, Path=ActualHeight}"
Name="MessageField" PreviewMouseMove="MessageField_PreviewMouseMove_1"
>
</Canvas>
</Canvas>
</Window>
mainGrid用于托管其他控件。基本上它有一个选项卡控件,用于托管窗口以及选项卡项中的wpf控件。现在我想要一个弹出控件,当出现时应该在所有控件,wpf以及windows控件之上。
现在我有一个用户控件,我可以使用它作为弹出窗口,但控件的问题是,它不是Windows控件的顶部。它位于wpf控件之上。
MoveableMessageBox userControl = new MoveableMessageBox();
System.Windows.Controls.Canvas.SetZIndex(userControl, (int)1);
MessageField.Children.Add(userControl);
请建议如何在Windows控件的顶部进行此控件。
答案 0 :(得分:1)
听起来你只想要一个自定义的对话窗口。幸运的是,这些在WPF中创建非常简单。只需像这样扩展Window
类:
<Window x:Class="WpfApplication2.Views.PopupWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="PopupWindow" Height="300" Width="300" Background="LightGreen"
WindowStyle="None" ResizeMode="NoResize">
<Grid>
<TextBlock Text="Message" HorizontalAlignment="Center"
VerticalAlignment="Center" />
</Grid>
</Window>
public partial class PopupWindow : Window
{
public PopupWindow()
{
InitializeComponent();
PreviewMouseMove += new MouseEventHandler(PopupWindow_PreviewMouseMove);
}
private void PopupWindow_PreviewMouseMove(object sender, MouseEventArgs e)
{
if (Mouse.LeftButton == MouseButtonState.Pressed) DragMove();
}
}
DragMove
方法可让用户移动无边框Window
,它将显示在所有其他Window
的顶部。您可以这样显示:
PopupWindow popup = new PopupWindow();
popup.ShowDialog();
当然,这是一个简单,不完整的例子,我将把它留给你来完成它。例如,此Button
上没有关闭Window
,因此您必须添加(在此之前使用ALT + F4关闭它)。在DialogResult
关闭时,您还需要返回Window
值,但您可以从MSDN上的Dialog Boxes Overview页面找到您仍需要做的所有事情。