Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Синхронное перетаскивание двух окон, отловить события перетаскивания окна 
:(
    Опции темы
Kozladoeff
Дата 18.6.2009, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



Коллеги, подскажите.
Тема такая. Нужно перетаскивать два wpf окна синхронно. Т.е. тащишь одно, а второе как бы приклеено к первому - вроде как в WinAmp'e. Что-то в событиях wpf ничего полезного не нашел. По изменению размера есть SizeChanged, а по позиции окна - не вижу.

Это сообщение отредактировал(а) Kozladoeff - 18.6.2009, 12:09
PM MAIL   Вверх
WolfTheGrey
Дата 20.6.2009, 02:32 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 21.1.2009
Где: forum.vingrad.ru

Репутация: 2
Всего: 2




Модератор: Сообщение скрыто.

PM MAIL   Вверх
Человек01
Дата 16.7.2009, 06:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 20.2.2009
Где: Абакан, респ. Хак асия, Россия

Репутация: 2
Всего: 2



Хайя Друг.
Если честно то тоже не нашел такого события.
Я например сделал бы так:
проект test010

Window1.xaml:
Код

<Window x:Class="test010.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:loc="clr-namespace:test010"
        Title="Window1" Height="300" Width="300" WindowStyle="None" ResizeMode="CanResizeWithGrip" MouseLeftButtonDown="Window_MouseLeftButtonDown" MouseLeftButtonUp="Window_MouseLeftButtonUp" PreviewMouseMove="Window_MouseMove" >    
    <Grid Name="MegaGrid">
        <loc:UserControl1></loc:UserControl1>
    </Grid>
</Window>


Window1.xaml.cs:
Код


using System.Windows;
namespace test010
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(Window1_Loaded);
        }
        Window1 two;
        bool Isecond = false;
        public Window1(Window1 mainwindow)
        {
            Isecond = true;
            two = mainwindow;
            InitializeComponent();            
        }

        void Window1_Loaded(object sender, RoutedEventArgs e)
        {
            two = new Window1(this);
            two.Loaded += new RoutedEventHandler(two_Loaded);
            two.Show();
            
        }

        void two_Loaded(object sender, RoutedEventArgs e)
        {
            TimingOfDisplacement(null);
        }
        
        private void Window_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {            
            oldPoint = this.PointToScreen(e.GetPosition(this));
            this.CaptureMouse();
        }

        private void Window_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            this.ReleaseMouseCapture();
        }

        Point oldPoint ;
        private void Window_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
        {
            if (this.IsMouseCaptured)
            {                
                Point p = this.PointToScreen(e.GetPosition(this));
                Point p1 = new Point(p.X - oldPoint.X, p.Y - oldPoint.Y);
                TimingOfDisplacement(p1);
                oldPoint = p;
            }
        }

        private void TimingOfDisplacement(Point? p)
        {
            double x = this.Left;
            double y = this.Top;
            if (p != null)
            {
                x += p.Value.X;
                y += p.Value.Y;
                this.Left = x;
                this.Top = y;
            }
            double w = this.Width;
            if(!Isecond)
                two.Left = x + w;
            else
                two.Left = x - w;
            two.Top = y;
        }
    }
}


В общем смысл ясен.
Так что пользуемся и говорим Человеку спасибо.  smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0527 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.