Почему пограничный контроль WPF не имеет события mousedoubleclick? - PullRequest
25 голосов
/ 05 августа 2010

Почему в пограничном контроле WPF нет события mousedoubleclick?У меня есть ItemsControl с некоторыми элементами макета для DataTemplate.Я хочу обработать событие двойного щелчка, чтобы открыть всплывающее диалоговое окно с подробностями, но граница, контейнер моего макета, не отображает событие.

Любые предложения о том, как получить событие двойного щелчкаили переделать xaml, чтобы сделать это возможным?

Ответы [ 3 ]

47 голосов
/ 15 января 2014

Просто используйте InputBindings.

<Border>
    <Border.InputBindings>
        <MouseBinding MouseAction="LeftDoubleClick" Command="..."/>
    </Border.InputBindings>
</Border>

В целом; избегайте использования событий, если не разрабатываете элементы управления в WPF. Обычно использование кода, лежащего в основе событий, является сильным указанием на разрыв шаблона MVVM.

16 голосов
/ 05 августа 2010

MouseDoubleClick объявлен в Control, поэтому вам просто необходим экземпляр некоторого Control в вашем ItemTemplate.Самое простое, что можно сделать, это использовать базовый класс Control, который не имеет никакого другого поведения, и просто дать ему настроенный шаблон с тем, что сейчас есть в вашем ItemTemplate.

<ItemsControl>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Control MouseDoubleClick="Control_MouseDoubleClick">
                <Control.Template>
                    <ControlTemplate>
                        <Border>
                            <!--Other ItemTemplate stuff-->
                        </Border>
                    </ControlTemplate>
                </Control.Template>
            </Control>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
6 голосов
/ 05 августа 2010

Обновление: простите, мой плохой - поздний час

Внутри события нажатия кнопки мыши вы получите ClickCount

 //  e.Handled = true;  optional

 if (e.ClickCount > 1)
 {
    // here comes double click and more :)
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...