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

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

Susan Sarandon
リリース: 2025-01-07 15:42:40
オリジナル
950 人が閲覧しました

FlipView での XAML DataTemplate 内のコントロールへのアクセス

データ テンプレートは、XAML での項目のレンダリングを合理化しますが、内部コントロールへのアクセスは、視覚的および論理的なツリーの分離により課題が生じます。 複数のテンプレート インスタンス間で名前が競合する可能性があるため、Name プロパティは FlipViewDataTemplate 内で直接使用できません。

解決策は、VisualTreeHelper を使用してビジュアル ツリーを横断し、生成された各項目内の特定のコントロールを見つけることです。

ヘルパー関数:

この関数は、指定された名前のコントロールをビジュアル ツリーで再帰的に検索します。

<code class="language-csharp">public T FindChildControl<T>(DependencyObject control, string ctrlName) where T : DependencyObject
{
    int childNumber = VisualTreeHelper.GetChildrenCount(control);
    for (int i = 0; i < childNumber; i++)
    {
        DependencyObject child = VisualTreeHelper.GetChild(control, i);
        FrameworkElement fe = child as FrameworkElement;
        if (fe != null && fe.Name == ctrlName)
        {
            return child as T;
        }
        else
        {
            T nextLevel = FindChildControl<T>(child, ctrlName);
            if (nextLevel != null)
                return nextLevel;
        }
    }
    return null;
}</code>
ログイン後にコピー

コントロールへのアクセス:

現在選択されている Image 項目からコントロール (例: "img1" という名前の FlipView) を取得するには、次のコードを使用します:

<code class="language-csharp">var selectedItem = MyFlipView.SelectedItem;
if (selectedItem == null)
    return null;

var container = MyFlipView.ItemContainerGenerator.ContainerFromItem(selectedItem);
Image img1 = FindChildControl<Image>(container, "img1");</code>
ログイン後にコピー

これにより、Image コントロールが取得されます。 コントロールが見つからない場合は、忘れずに null ケースを処理してください。

How to Access Controls within XAML DataTemplates in a FlipView?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート