#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, он работает хорошо.