Как избежать ScatterViewItem от захвата событий мыши? - PullRequest
0 голосов
/ 21 апреля 2011

По сути, у меня есть набор инструментов Surface ToolKit ScatterView, ограниченный списком путей изображений, которые представлены в виде ImageView. Элемент управления ImageView использует события MouseUp, но это событие не вызывается при наведении мыши. Я пробовал это с PreviewMouseUp, и не повезло. Просто чтобы уточнить, я создаю сенсорное приложение Win7 с использованием Surface ToolKit.

Window.xaml:

<s:SurfaceWindow x:Class="SurfaceApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="http://schemas.microsoft.com/surface/2008"
xmlns:view="clr-namespace:SurfaceApplication1"
Title="SurfaceApplication1"
>
<Grid>
    <s:ScatterView x:Name="scatterView">
        <s:ScatterView.ItemTemplate>
            <DataTemplate>
                <view:ImageView DataContext="{Binding}" MinHeight="300" MinWidth="300"/>
            </DataTemplate>
        </s:ScatterView.ItemTemplate>
    </s:ScatterView>
</Grid>

Window.xaml.cs:

public Window1()
    {
        InitializeComponent();
        Loaded += new RoutedEventHandler(SurfaceWindow1_Loaded);
    }

    void SurfaceWindow1_Loaded(object sender, RoutedEventArgs e)
    {
        scatterView.ItemsSource = Directory.GetFiles(@"C:\Users\Public\Pictures\Sample Pictures", "*.jpg");
    }

ImageView.xaml:

<UserControl x:Class="SurfaceApplication1.ImageView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" PreviewMouseUp="Grid_MouseUp">
<Grid MouseUp="Grid_MouseUp">
    <StackPanel>
        <Image Source="{Binding}"/>
        <TextBlock Text="{Binding}" Height="20" Width="100"/>
    </StackPanel>
</Grid>

Кто-нибудь знает способ обойти это? Мне нужно, чтобы событие MouseUp было обработано в ImageView. Спасибо.

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

Мышь захватывается в ScatterViewItem, что означает, что события мыши не достигнут дочерних элементов.Вам нужно будет поместить этот обработчик события в сам ScatterViewItem или в родительский элемент элемента.В коде usercontrol вы, вероятно, могли бы сделать что-то вроде Parent.MouseUpEvent += yourHandler

Я бы рекомендовал использовать события ContainerActivation и ContainerDeactivation в ScatterViewItem вместо mouseup / down.События активации будут происходить, когда первое касание отключается и когда срабатывает последнее касание.В мире мультитач вы должны тщательно продумать, что произойдет, когда пользователь использует несколько пальцев на любом элементе управления и поднимает эти пальцы по одному.

0 голосов
/ 21 апреля 2011

Вместо использования обычного синтаксиса события.Вы можете использовать метод UIElement.AddHandler в коде позади и указать, что вы хотите получать обработано событий

MyGrid.AddHandler(Button.ClickEvent, new RoutedEventHandler(GetHandledToo), true);

Вы можете прочитать об этом в MSDN.

...