Фокус вкладки на listview пропускает заголовки

#c# #listview #focus #uwp-xaml #datatemplate

#c# #listview #фокус #uwp-xaml #datatemplate

Вопрос:

У меня есть элемент управления listview, как показано ниже, который имеет шаблон заголовка и шаблон элемента. При нажатии кнопки, которая открывает это представление списка, фокус сначала переходит ко всему представлению списка. При нажатии на вкладку фокус переходит к первому элементу представления списка, пропуская заголовок. В любом случае я могу перейти к заголовкам, используя клавиши со стрелками вверх / вниз, но ожидаемое поведение при нажатии на вкладку, сначала фокусируется на шаблоне заголовка

 <ListView 
    x:Name="DataListView"
    Grid.Row="1" 
    IsItemClickEnabled="True"
    ItemClick="ListView_ItemClick"
    RightTapped="ListView_RightTapped"
    SelectionMode="None"
    IsTabStop="{x:Bind utilities:XamlExtensions.Invert(ViewModel.IsInitialSetupCompleted), Mode=OneWay}"
    ItemTemplateSelector="{StaticResource ItemTemplateSelector}">
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem" BasedOn="{StaticResource NoMarginListStyle}">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            <Setter Property="VerticalContentAlignment" Value="Stretch"/>
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.GroupStyle>
        <GroupStyle>
            <GroupStyle.HeaderContainerStyle>
                <Style TargetType="ListViewHeaderItem">
                    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                </Style>
            </GroupStyle.HeaderContainerStyle>
            <GroupStyle.HeaderTemplate>
                <DataTemplate x:DataType="today:HeaderGroupViewModel">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <TextBlock 
                            Text="{x:Bind Name}"
                            Grid.Column="0"
                            TextWrapping="WrapWholeWords"/>
                        <Button
                            Grid.Column="1"
                            Click="MoreOptions_Click"
                            RightTapped="Button_RightTapped"
                            Style="{ThemeResource BrandedChromelessButton}">
                        </Button>
                    </Grid>
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
        </GroupStyle>
    </ListView.GroupStyle>
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <ItemsStackPanel AreStickyGroupHeadersEnabled="False"/>
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
</ListView>
 

Любая помощь приветствуется. Я пытался использовать tab index, но не сработало. Спасибо

Ответ №1:

ListViewItem можно щелкнуть нормально, а затем получить фокус.

Итак, вы можете добавить элемент ListViewItem в DataTemplate HeaderTemplate следующим образом.

 <ListView.GroupStyle>
    <GroupStyle >
        <GroupStyle.HeaderTemplate>
            <DataTemplate>
                <ListViewItem>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Key}" FontSize="35" FontWeight="Bold"/>
                        <Button Margin="30,0,0,0" />
                    </StackPanel>
                </ListViewItem>
            </DataTemplate>
        </GroupStyle.HeaderTemplate>
    </GroupStyle>
</ListView.GroupStyle>
 

Обновить:

Вы могли бы установить IsTabStop свойство ListView и button свойство HeaderItem равным false .
Пожалуйста, обратитесь к следующему.

 <ListView 
 ……                  
 IsTabStop="False">
            ……
           <GroupStyle.HeaderTemplate>
                    <DataTemplate>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>
                            <TextBlock ……/>
                            <Button IsTabStop="False"  Grid.Column="1" Margin="30,0,0,0" Content="Click me"/>
                        </Grid>
                    </DataTemplate>
            </GroupStyle.HeaderTemplate>
   ….        
</ListView>
 

Комментарии:

1. это все еще не работает. На вкладке фокусируется первый элемент listview, отличный от заголовка

2. @Nisha Я обновил ответ, вы могли бы попробовать.

3. Сохраняя значение IsTabStop равным false для всего списка, он даже не получит фокус на первом месте ryt. Свойство IsTabStop listview уже привязано к одному свойству IsTabStop="{x:Bind utilities:XamlExtensions.Invert(ViewModel.IsInitialSetupCompleted), Mode=OneWay}" , когда оно равно false, весь просмотр списка не получает фокуса

4. Сколько элементов управления имеет ваш интерфейс разработки, и есть ли только один ListView? Если есть только ListView, он работает хорошо.