4

我有一个相当复杂的数据树,我在 WPF UserControl 中显示,并且该控件使用 DataTemplates 来创建各种 UI 元素并将其链接到树内的各种数据。这是一个(非常)简单的示例,它涉及在位于画布上的 ItemsControl 中显示的项目列表,并且每个元素都用 TextBox 表示:

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

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

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

4

1 回答 1

2

正如您所说,如果您不能直接将成员添加到您正在使用的项目类中,我假设它是您无权访问的内置类型,您必须创建一个正确的视图模型来访问触发器,例如

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

这是另一层抽象,但您总是会发现使用您有权访问的视图模型很重要。

于 2012-07-05T05:23:17.237 回答