ホームページ >バックエンド開発 >C++ >XAML DataTemplate 内のコントロールにアクセスするにはどうすればよいですか?

XAML DataTemplate 内のコントロールにアクセスするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-07 15:27:411023ブラウズ

How Can I Access Controls within XAML DataTemplates?

XAML DataTemplate のコントロールへのアクセス: 実践ガイド

XAML DataTemplate 内のコントロールに名前で直接アクセスするのは難しい場合があります。 DataTemplate は動的な性質を持っており、その場で要素を作成するため、名前の競合が発生することがよくあります。 これを克服するには、VisualTreeHelper クラスのような手法を使用して、ビジュアル ツリー (すべての UI 要素の階層構造) をナビゲートする必要があります。

方法 1: 再帰的ビジュアル ツリー トラバーサル

再帰関数はビジュアル ツリーを効率的に探索します。 この例は、すべての子コントロールを検索するための AllChildren メソッドを示しています。

<code class="language-csharp">public List<Control> AllChildren(DependencyObject parent)
{
    var children = new List<Control>();
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
    {
        var child = VisualTreeHelper.GetChild(parent, i);
        if (child is Control control)
        {
            children.Add(control);
        }
        children.AddRange(AllChildren(child));
    }
    return children;
}</code>

このメソッドは、ビジュアル ツリー内で名前によってコントロールを見つけることができます。 たとえば、Image の選択された項目内で「img1」という名前の FlipView を検索するには:

  1. MyFlipView.SelectedItem が null でないことを確認してください。
  2. コンテナを取得します: var container = MyFlipView.ItemContainerGenerator.ContainerFromItem(MyFlipView.SelectedItem);
  3. すべての子を取得するには、AllChildren(container) を使用します。
  4. リストをフィルタリングして、「img1」という名前の Image を見つけます。

方法 2: TemplateParent を活用する

または、TemplatedParent プロパティを使用して、DataTemplate 内から親コントロールにアクセスします。このアプローチにはヘルパー クラスが必要です:

<code class="language-csharp">public class TemplatedControl<TControl> : ContentControl
    where TControl : FrameworkElement
{
    public TemplatedControl(TControl control)
    {
        Content = control;
    }

    public TControl Child => (TControl)Content;
}</code>

次に、DataTemplate で次のようにします。

<code class="language-xaml"><datatemplate>
    <templatedcontrol x:Name="myImage">
        <image ... />
    </templatedcontrol>
</datatemplate></code>

親コントロールの Image 変数を介して myImage コントロールにアクセスできるようになりました。

どちらの方法も、DataTemplate 内の名前付きコントロールにアクセスするためのソリューションを提供し、データ駆動型 UI をより詳細に制御できるようにします。 コーディング スタイルとプロジェクトの構造に最適な方法を選択してください。

以上がXAML DataTemplate 内のコントロールにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。