4

WPF UserControl に表示しているかなり複雑なデータ ツリーがあり、コントロールは DataTemplates を使用してさまざまな UI 要素を作成し、ツリー内のさまざまなデータにリンクしています。これは (非常に) 単純化された例で、項目のリストがキャンバス上にある ItemsControl に表示され、各要素が TextBox で表されます。

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

UserControl 内でイベントが発生したため、リスト項目の 1 つへの参照があり、その背後にある 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 に答える