#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 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
это никак не повлияет на этот код.