如何从位于DataTemplate标签之外的控件访问位于DataTemplate中的控件

本文关键字:DataTemplate 控件 访问 标签 | 更新日期: 2023-09-27 18:10:09

情况:我有一个文本框控件位于<phone:Panorama.TitleTemplate>标签的DataTemplate

<phone:Panorama.TitleTemplate>
            <DataTemplate>
                <TextBlock Text="select your problem"  Margin="7,40,0,0" 
                           FontSize="60" Foreground="{StaticResource PhoneForegroundBrush}"/>
            </DataTemplate>
</phone:Panorama.TitleTemplate>

现在我有另一个按钮位于DataTemplate标签和LayoutRoot网格标签之外。这个按钮有一个click事件,其定义在cs文件后面的代码中。

问题:我想访问此按钮的事件处理程序内的文本框。我该怎么做呢?

如何从位于DataTemplate标签之外的控件访问位于DataTemplate中的控件

您可以使用VisualTreeHelper

试试下面这个用于列表框的代码片段,你可以修改它:

public string option_selected = "";
public int check_count = 0;

public void SearchElement(DependencyObject targeted_control)
{
    var count = VisualTreeHelper.GetChildrenCount(targeted_control);   // targeted_control is the listbox
    if (count > 0)
    {
        for (int i = 0; i < count; i++)
        {
            var child = VisualTreeHelper.GetChild(targeted_control, i);
            if (child is TextBlock) // specific/child control 
            {
                TextBlock targeted_element = (TextBlock)child;
                if (targeted_element.IsChecked == true)
                {
                    if (targeted_element.Tag!= null)
                    {
                        option_selected = targeted_element.Tag.ToString();
                    }
                                            return;
                }
            }
            else
            {
                SearchElement(child);
            }
        }
    }
    else
    {
        return;
    }
}

这将是一个很好的例子,你可以通过如何访问一个特定的项目在Listbox与DataTemplate?

希望有帮助!