Как правильно сделать InputBindings в элементе Border? - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть WPF ListBox, который использует DataTemplate как ItemTemplate.DataTemplate состоит из Border и нескольких дочерних элементов.

Мне нужна общая команда ('SelectImageCommand'), обрабатывающая щелчок левой кнопкой мыши в любом месте области Border (любой дочерний элемент или сама пустая граница).

Я поместилInputBinding в Border.Команда становится выполненной как привилегированная, но «визуальный выбор» (постоянное изменение цвета фона) больше не происходит.Если я удаляю MouseBinding, визуальный выбор работает нормально.

Мне удалось реализовать обходной путь не MVVM, добавив обработчик событий для события MouseLeftButtonDown.

Мне кажется, что MouseBinding "обрабатывает" событие щелчка мыши так же, как когда я реализую обработчик события и устанавливаю для свойства Handled MouseButtonEventArgs значение true.

Как я могу создать MVVM MouseBinding, который не перехватывает событие нажатия?

Я не профессионал WPF.Пожалуйста, попробуйте предоставить решения, которые соответствуют MVVM.

<DataTemplate x:Key="ImageItemTemplate">
    <Border Padding="10" Width="325" Height="350"
            BorderBrush="{DynamicResource SignificantInformationColorBrush}"
            BorderThickness="0" Margin="5" Background="Transparent" Focusable="True" MouseLeftButtonDown="ImageBorderOnMouseLeftButtonDown">
        <!--<Border.InputBindings>
            <MouseBinding MouseAction="LeftClick"
                          Command="{Binding Path=DataContext.SelectImageCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}"
                          CommandParameter="{Binding}" />
        </Border.InputBindings>-->
        <StackPanel>
            <Border BorderBrush="LightGray"
                    BorderThickness="1"
                    CornerRadius="1" Height="300" Width="300" Background="Transparent">
                <StackPanel Background="Black">
                    <Canvas Width="300" Height="300" VerticalAlignment="Center"
                            HorizontalAlignment="Center" Background="Transparent">
                        <Image Width="300" Stretch="UniformToFill" StretchDirection="DownOnly"
                               Source="{Binding BitmapImage}"
                               Height="300">
                            <Image.InputBindings>
                                <MouseBinding MouseAction="LeftDoubleClick"
                                              Command="{Binding Path=DataContext.OpenOriginalCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}"
                                              CommandParameter="{Binding}" />
                            </Image.InputBindings>
                        </Image>
                    </Canvas>
                </StackPanel>
            </Border>
            <StackPanel Orientation="Horizontal" Margin="1 10 0 0">
                <TextBlock Margin="5 0 0 0" TextAlignment="Center"
                           FontSize="11" Text="{Binding ImageInfo.SopInstanceUid}" Background="Transparent" />
            </StackPanel>
        </StackPanel>
    </Border>
</DataTemplate>

1 Ответ

0 голосов
/ 11 февраля 2019

Установите свойство Background для Border:

<Border Padding="10" Width="325" Height="350" BorderThickness="0" Margin="5"
        Background="Transparent">
...

Если вы этого не сделаете, неокрашенная область не будет реагировать на события мыши.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...