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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> При быстром перемещении срывается объект, MouseMove 
:(
    Опции темы
Rohoss
Дата 26.7.2009, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

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



Если элемент(Rectangle) передвигать медленно всё нормально, но если ускорить движение, он срывается.
Почему и что делать?

Код

selPosition.MouseMove += new MouseEventHandler(selPosition_MouseMove); 
..............................
        private void selPosition_MouseMove(Object sender, MouseEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed)
            {
                Point p = e.GetPosition((IInputElement)sender);
                double newTop = p.Y + selPosition.Margin.Top - (selPosition.Height / 2);
                double newLeft = p.X + selPosition.Margin.Left - (selPosition.Width / 2);
                selected.Margin = new Thickness() { Top = newTop + 10, Left = newLeft + 10 };
                selPosition.Margin = new Thickness() { Top = newTop, Left = newLeft };
                Panel.SetZIndex(selPosition, 1);
            }
        }



--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
rooks
  Дата 28.7.2009, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Скорей всего он "срывается", когда курсор уходит из области контейнера и selPosition_MouseMove перестает вызываться. Причем курсор может находиться над панелью, но под ним не будет ни одного контрола. Вот небольшой примерчик, который можно закинуть в XamlPad или Kaxaml, в левой части mainGrid IsMouseOver == true, в правой - false, хотя вроде бы курсор над mainGrid:
Код
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid x:Name="mainGrid">  
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Border Background="Transparent" />
        <Rectangle Grid.ColumnSpan="2" Width="20" Height="20" Stroke="Black" StrokeThickness="1">
            <Rectangle.Style>
                <Style>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=mainGrid, Path=IsMouseOver}" Value="True">
                            <Setter Property="Rectangle.Fill" Value="Red" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Rectangle.Style>
        </Rectangle>
    </Grid>
</Page>

Из возможных решений: вариант попроще - поставить у контейнера какой-нибудь Background, даже Transparent сойдет. Вариант получше - в MouseUp делать CaptureMouse(), в MouseDown - ReleaseMouseCapture(), тогда даже выходы за пределы контейнера будут отрабатываться корректно.
PM MAIL ICQ   Вверх
neiron
Дата 28.7.2009, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В msdn также

Цитата

Во время перетаскивания позиция мыши не может быть с уверенностью определена посредством метода GetPosition. Дело в том, что управление мышью (возможно, включающее захват) осуществляется исходным элементом операции перетаскивания до ее завершения, при это значительная часть этого поведения управляется базовыми вызовами Win32. Вместо этого можно попробовать применить следующие подходы:

Вызовите метод GetPosition объекта DragEventArgs, передаваемого событиям перетаскивания (DragEnter, DragOver, DragLeave).

Вызовите GetCursorPos с использованием P/Invoke.


PM MAIL   Вверх
Rohoss
Дата 1.8.2009, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

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



Всем спасибо – решение найдено! WPF Diagram Designer


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




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


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

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