XAML 控件.IsTemplateFocusTarget的作用是什么?

lxkprmvk  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(102)

我一直在阅读有关Control.IsTemplateFocusTarget的内容,它是Windows.UI.Xaml.Controls.Control上的一个XAML附加属性。
文档很少:
获取或设置一个值,该值指示此元素是否是具有焦点视觉对象的控件模板的一部分。
[...]
此属性只能在ControlTemplate中使用。如果在ControlTemplate之外设置此属性,则会忽略它。如果在ControlTemplate中多次设置此附加属性,则会引发异常。
Disclaimer: I work for Microsoft.

eimct9ow

eimct9ow1#

就我所能确定的,Control.IsTemplateFocusTarget与那个简短文档中描述的差不多:
如果您在ControlTemplate中的项目上设定Control.IsTemplateFocusTarget="true"(例如,如果您正在重新建立CheckBox的模板),视觉化焦点矩形将会出现在该项目上,而不是出现在整个模板周围。
有趣的是,我相信Control.IsTemplateFocusTarget在某些情况下也适用于DataTemplates,比如ListView。
这个简单的ListView在它的ItemTemplate中使用Control.IsTemplateFocusTarget来显示TextBlock周围的焦点矩形:

<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不会对该代码产生任何影响。

相关问题