首页 文章

WPF:从数据上下文对象中获取DataTemplate元素

提问于
浏览
3

我有一个相当复杂的数据树,我在WPF UserControl中显示,控件使用DataTemplates创建和链接各种UI元素,直到树内的各种数据 . 这是一个(非常)简单的示例,它包含一个项目列表,这些项目位于画布上的ItemsControl中,每个元素都用TextBox表示:

<ItemsControl.ItemTemplate>
    <DataTemplate>
        <TextBox
            Text="{Binding ...}"
            Canvas.Left="{Binding ...}"
            Canvas.Top="{Binding ...}"
        />
    </DataTemplate>
</ItemsControl.ItemTemplate>

现在我的UserControl中发生了一个事件,我有一个列表项的引用,我想将焦点设置为它后面的TextBox项 . 有没有一种简单的方法从数据上下文绑定的数据对象中获取TextBox元素?或者我是否必须自己手动遍历整个可视化树?

我意识到我可以在数据元素本身内部放置一个成员并使用触发器来做我想做的任何事情,但在我的情况下,它需要额外的抽象层,如果可能的话我真的想避免 .

1 回答

  • 1

    如你所说,如果你不能直接将一个成员添加到你正在使用的item类中,我认为它是一个你无权访问的内置类型,你必须创建一个合适的View Model来访问类似的触发器

    <Trigger Property="IsFocused" Value="True">
        <Setter TargetName="myTextBox" Property="FocusManager.FocusedElement" Value="{Binding IsTextBoxFocused}" />
    </Trigger>
    

    它是另一层抽象,但您总会发现使用您可以访问的视图模型很重要 .

相关问题