Что делает Control.Что делает IsTemplateFocusTarget?

#xaml #uwp #windows-runtime

#xaml #uwp #windows-среда выполнения

Вопрос:

Я читал о Control.IsTemplateFocusTarget том, что является вложенным свойством XAML в Windows.UI.Xaml.Controls.Управление.

Документация скудная:

Возвращает или задает значение, указывающее, является ли этот элемент частью шаблона элемента управления, который имеет визуальный фокус.

[…]

Это свойство предназначено только для использования в ControlTemplate. Если он установлен вне ControlTemplate , он игнорируется. Если это присоединенное свойство задается более одного раза в ControlTemplate, генерируется исключение.

Ответ №1:

Насколько я могу определить, Control.IsTemplateFocusTarget это в значительной степени так, как описано в этой короткой документации:

Если вы установите Control.IsTemplateFocusTarget="true" значение для элемента в ControlTemplate (например, если вы меняете шаблон флажка), прямоугольник визуального фокуса будет отображаться на этом элементе, а не вокруг всего шаблона.


Интересно, что, я полагаю Control.IsTemplateFocusTarget , в некоторых случаях также работает с таблицами данных, например, для ListView.

Этот простой ListView использует Control.IsTemplateFocusTarget в нем ItemTemplate , чтобы показать фокус только вокруг текстового блока:

скриншот элементов в ListView с фокусом на среднем элементе, но прямоугольник фокуса находится вокруг текста в элементе, а не всего элемента.

 <ListView ItemsSource="{x:Bind Items}"
                  CanDragItems="True" CanReorderItems="True" AllowDrop="True"
                  SelectionMode="None" IsItemClickEnabled="True" ItemClick="ListView_ItemClick">
            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <ItemsStackPanel Orientation="Horizontal" />
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>
            <ListView.ItemTemplate>
                <DataTemplate x:DataType="x:String">
                    <StackPanel>
                        <TextBlock Text="{x:Bind}" Control.IsTemplateFocusTarget="True" />
                        <Button Content="Foo" IsTabStop="False" />
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
</ListView>
 

Интересно, что такое поведение, похоже, не является гнездовым: если вы DataTemplate загружаете UserControl ( <MyGreatListViewItemTemplate Item="{x:Bind}" /> ) , Control.IsTemplateFocusTarget это никак не повлияет на этот код.