首頁 > 後端開發 > C++ > 如何存取 XAML 資料模板中的控制項?

如何存取 XAML 資料模板中的控制項?

Barbara Streisand
發布: 2025-01-07 15:27:41
原創
993 人瀏覽過

How Can I Access Controls within XAML DataTemplates?

存取 XAML 資料範本中的控制項:實用指南

按名稱直接存取 XAML DataTemplate 中的控制項可能很棘手。 DataTemplate 的動態特性(動態建立元素)通常會導致命名衝突。 為了克服這個問題,我們需要使用 VisualTreeHelper 類別等技術來導航視覺化樹(所有 UI 元素的層次結構)。

方法一:遞歸視覺樹遍歷

遞歸函數有效地探索視覺樹。 此範例顯示了查找所有子控制項的 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 不為空。
  2. 取得容器:var container = MyFlipView.ItemContainerGenerator.ContainerFromItem(MyFlipView.SelectedItem);
  3. 使用 AllChildren(container) 取得所有子級。
  4. 過濾清單以尋找名為「img1」的Image

方法 2:利用 TemplatedParent

或者,使用 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>
登入後複製

然後,在您的資料範本中:

<code class="language-xaml"><datatemplate>
    <templatedcontrol x:Name="myImage">
        <image ... />
    </templatedcontrol>
</datatemplate></code>
登入後複製

您現在可以透過父控制項的 Image 變數存取 myImage 控制項。

這兩種方法都提供了用於存取 DataTemplates 中的命名控制項的解決方案,從而提供對資料驅動 UI 的更多控制。 選擇最適合您的編碼風格和專案結構的方法。

以上是如何存取 XAML 資料模板中的控制項?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板