Search code examples
xamllistboxscrollviewer

SOLVED Pressing on ScrollViewer inside ListBox Item doesn't select the Item


I gave a ListBox that lists items. The items, can vary in size, but follow the same pattern:

picture................Metadata

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>

The items inside Metadata .xaml looks like this. StackPanels containing actual Metadata are automatically generated by code inside "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>

The problem I'm facing is the fact, that I need to be able to select an item inside the ListBox. But, by adding ScrollViewer in Metadata.xaml it seems I Reroute the selector, so it is trying to select an item in Metadata ScrollViewer instead of ListBox when I press the part of the ListBox containing Metadata. If I press on Thumbnail, or even RightClick on any part of the ListBox - it seems to select just fine.


Solution

  • [SOLVED] After playing around with available options in ScrollViewer I stumbled across Focusable. Setting it to False did the trick. I hope it will help someone in the future.

    <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>