РЕШЕНО Нажатие на ScrollViewer внутри элемента ListBox не выбирает элемент - PullRequest
0 голосов
/ 28 мая 2020

Я дал ListBox, в котором перечислены элементы. Элементы могут различаться по размеру, но следовать одному и тому же шаблону:

изображение ................ Метаданные

ID

<ListBox Name="View"  Grid.Row="2" ItemsSource="{Binding Human, ElementName=uc}"
            SelectedItem="{Binding SelectedHuman, ElementName=uc}"
            MouseDoubleClick="OnSubjectEditClick"
            VerticalContentAlignment="Center" 
            VirtualizingPanel.IsVirtualizing="True"
            VirtualizingPanel.ScrollUnit="Pixel"
            ScrollViewer.CanContentScroll="True"
            Grid.IsSharedSizeScope="True"
            ScrollViewer.HorizontalScrollBarVisibility="Disabled">

            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel />
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <ListBox.ItemTemplate >
                <DataTemplate >
                    <Border BorderBrush="#565656" BorderThickness="1" Margin="10" Padding="10">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition MaxHeight="300" />
                                <RowDefinition MaxHeight="50" />
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="auto" MinWidth="300" MaxWidth="500" SharedSizeGroup="col1"/>
                                <ColumnDefinition  MaxWidth="500" Width="*" SharedSizeGroup="col2"/>
                            </Grid.ColumnDefinitions>

                            <Image Grid.Row="0" Grid.Column="0" MaxHeight="300" MaxWidth="300" Source="{Binding Thumb}"/>
                            <TextBlock Grid.Column="0" Grid.Row="1" Text="{Binding Name}" FontWeight="Bold" TextAlignment="Center"/>
                            <local:MetadataView Grid.Column="1" Grid.RowSpan="2" Metadata="{Binding Metadata}" HorizontalAlignment="Stretch" VerticalAlignment="Center" IsEdit="False"  />
                        </Grid>

                    </Border>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

Элементы внутри Metadata .xaml выглядят следующим образом. StackPanels, содержащие фактические метаданные, автоматически генерируются кодом внутри "DisplayMode":

<Grid VerticalAlignment="Center" HorizontalAlignment="Stretch">
    <ScrollViewer  VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" CanContentScroll="False" Height="300" >
            <StackPanel   x:Name="DisplayMode" VerticalAlignment="Center" Grid.IsSharedSizeScope="True" >
            ........... 
            <StackPanel/> //AutoGenerated
            ............
            </StackPanel>
    </ScrollViewer>
</Grid>

Проблема, с которой я столкнулся, заключается в том, что мне нужно иметь возможность выбрать элемент внутри ListBox. Но, добавив ScrollViewer в Metadata.xaml, мне кажется, что я перенаправляю селектор, поэтому он пытается выбрать элемент в Metadata ScrollViewer вместо ListBox, когда я нажимаю часть ListBox, содержащую метаданные. Если я нажму на миниатюру или даже правой кнопкой мыши в любой части ListBox - кажется, что выбор будет прекрасным.

1 Ответ

0 голосов
/ 28 мая 2020

[решено] Поигравшись с доступными опциями в ScrollViewer, наткнулся на Focusable. Установка значения False сработала. Надеюсь, это кому-то поможет в будущем.

<Grid VerticalAlignment="Center" HorizontalAlignment="Stretch">
    <ScrollViewer  VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" CanContentScroll="False" Height="300" Focusable="False" >
        <StackPanel   x:Name="DisplayMode" VerticalAlignment="Center" Grid.IsSharedSizeScope="True" >

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