2014-11-18 4 views
0

У меня есть главное окноуправления WPF поверх управления Windows

<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, а также управления окнами.

Теперь у меня есть пользовательский элемент управления, который я могу использовать как всплывающее окно, но проблема с элементом управления заключается в том, что он не входит в верхнюю часть Windowscontrols. Он поставляется поверх элементов управления wpf.

MoveableMessageBox userControl = new MoveableMessageBox(); 
      System.Windows.Controls.Canvas.SetZIndex(userControl, (int)1); 
      MessageField.Children.Add(userControl); 

Просьба предлагать, как я могу сделать этот элемент управления в верхней части окна управления.

WIth Windows Control

With WPF control

+0

Вы можете добавить скриншот? – daniele3004

+0

Вы считали, что вывести всплывающее окно из 'Window', а не' UserControl' и присвоить главное окно свойству 'Owner'? – Grx70

+0

@ daniele3004 найдите прилагаемые изображения – Vikram

ответ

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 будет закрыт, но вы можете узнать все, что вам нужно сделать на странице Dialog Boxes Overview на MSDN.

Смежные вопросы