none
Соединить сторонами два окна WPF RRS feed

  • Вопрос

  • Подскажите как прописать чтоб при открытии второго окна из формы родителя, второе окно заняло своё место рядом с окном родителя т.е. верхний левый угол дочернего окна был в точке правого верхнего окна родителя.  И при перемещении главного окна, либо дочернего обе формы неразлучно перемещались вместе.

    Главное окно:

    namespace WpfApplication6

    {

        /// <summary>

        /// Логика взаимодействия для MainWindow.xaml

        /// </summary>

        public partial class MainWindow : Window

        {

            public MainWindow()

            {

                InitializeComponent();

            }

            private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)

            {

                this.DragMove();

            }

            private void button2_Click(object sender, RoutedEventArgs e)

            {

                Window2 w2 = new Window2();

                w2.Owner = this;

                w2.Show();

            }

            private void button1_Click_1(object sender, RoutedEventArgs e)

            {

                this.Close();

            }

    Второе окно:

    namespace WpfApplication6

    {

        /// <summary>

        /// Логика взаимодействия для Window2.xaml

        /// </summary>

        public partial class Window2 : Window

        {

            public Window2()

            {

                InitializeComponent();

            }

            private void button1_Click(object sender, RoutedEventArgs e)

            {

                this.Close();

            }

            private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)

            {

                this.DragMove();

            }

        }

    }

    • Изменено Aleksey-T 28 октября 2011 г. 11:16
    28 октября 2011 г. 10:47

Ответы

  • > чтоб при открытии второго окна из формы родителя, второе окно заняло своё место рядом с окном родителя т.е. верхний левый угол дочернего окна был в точке правого верхнего окна родителя. И при перемещении главного окна, либо дочернего обе формы неразлучно перемещались вместе.
     
     

     

    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            Width="200" Height="200"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <Button Content="Test" Click="Button_Click" />
    </Window>
    
    
    using System.Data;
    using System.Windows;
    using System.Windows.Media;
    using System.Windows.Documents;
    using System;
    
    namespace WpfApplication1
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                Action<Window> fn = w =>
                {
                    w.Left = this.Left + this.Width;
                    w.Top = this.Top;
                };
                
                Window wnd = new Window();
                wnd.Width = 100;
                wnd.Height = 100;
                fn(wnd);
                wnd.Owner = this;
                wnd.Show();
                this.LocationChanged += (s, _) => fn(wnd);
            }
        }
    }
    
    

     


    • Предложено в качестве ответа Malobukv 30 октября 2011 г. 18:11
    • Изменено Malobukv 31 октября 2011 г. 9:08
    • Помечено в качестве ответа Abolmasov Dmitry 1 ноября 2011 г. 5:44
    30 октября 2011 г. 18:11

Все ответы

  • > чтоб при открытии второго окна из формы родителя, второе окно заняло своё место рядом с окном родителя т.е. верхний левый угол дочернего окна был в точке правого верхнего окна родителя. И при перемещении главного окна, либо дочернего обе формы неразлучно перемещались вместе.
     
     

     

    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            Width="200" Height="200"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <Button Content="Test" Click="Button_Click" />
    </Window>
    
    
    using System.Data;
    using System.Windows;
    using System.Windows.Media;
    using System.Windows.Documents;
    using System;
    
    namespace WpfApplication1
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                Action<Window> fn = w =>
                {
                    w.Left = this.Left + this.Width;
                    w.Top = this.Top;
                };
                
                Window wnd = new Window();
                wnd.Width = 100;
                wnd.Height = 100;
                fn(wnd);
                wnd.Owner = this;
                wnd.Show();
                this.LocationChanged += (s, _) => fn(wnd);
            }
        }
    }
    
    

     


    • Предложено в качестве ответа Malobukv 30 октября 2011 г. 18:11
    • Изменено Malobukv 31 октября 2011 г. 9:08
    • Помечено в качестве ответа Abolmasov Dmitry 1 ноября 2011 г. 5:44
    30 октября 2011 г. 18:11
  • Спасибо большое всё отлично, немного подправил только. 

    В место:

    Action<Window> fn = w =>
                {
                    w.Left = this.Left + this.Width;
                    w.Top = this.Top + this.Height;
                };
                
    Исправил на:

    Action<Window> fn = w =>
                {
                    w.Left = this.Left + this.Width;
                    w.Top = this.Top;
                };
                

    31 октября 2011 г. 9:03
  • > Исправил на: ... w.Top = this.Top;
     

    ок. я также исправил.

    31 октября 2011 г. 9:11