Windows控件之上的WPF控件

时间:2014-11-18 08:19:25

标签: c# wpf winforms

我有一个主窗口

<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控件的顶部进行此控件。

WIth Windows Control

With WPF control

1 个答案:

答案 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页面找到您仍需要做的所有事情。