Windows phone 如何在windows phone运行时从所有文本框(其中动态创建文本框)访问文本

Windows phone 如何在windows phone运行时从所有文本框(其中动态创建文本框)访问文本,windows-phone,windows-phone-8.1,winrt-xaml,Windows Phone,Windows Phone 8.1,Winrt Xaml,我一直在尝试从文本框集合中获取文本,这些文本框是通过使用items控件将集合绑定到stackpanel而动态创建的,该控件位于单独的用户控件中,我正在windows phone运行时将其加载到页面上 下面是我的UserControl的代码: <UserControl x:Class="CfMobility.UserControls.CredentialsUserControl" xmlns="http://schemas.microsoft.com/winfx/2006/x

我一直在尝试从文本框集合中获取文本,这些文本框是通过使用items控件将集合绑定到stackpanel而动态创建的,该控件位于单独的用户控件中,我正在windows phone运行时将其加载到页面上

下面是我的UserControl的代码:

<UserControl
    x:Class="CfMobility.UserControls.CredentialsUserControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:CfMobility.UserControls"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300"
    d:DesignWidth="400">

    <ScrollViewer>
    <ItemsControl ItemsSource="{Binding SelectedCategorySettings}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel IsTapEnabled="False">
                    <TextBlock Text="{Binding SettingKey}" Style="{ThemeResource BaseTextBlockStyle}"></TextBlock>
                    <TextBox  Text="{Binding SettingValue}" Width="300px"/>
                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
    </ScrollViewer>
</UserControl>

我在另一个页面中有一个内容控件,如下所示:

<ContentControl x:Name="Container" Grid.Row="1" Margin="19,10,19,0">
        </ContentControl>

当我导航到页面时,我将此内容控件绑定到上面的stackpanel

如您所见,我使用ItemsScroll将“SelectedCategorySettings”集合绑定到StackPanel,该集合根据集合显示文本框的数量。在这里,我无法确定是否要将页面上显示的所有文本框中的文本保存到json文件中,如何访问上述场景中动态显示的所有文本框的文本

注意,items控件位于单独的用户控件中


提前感谢

您应该为所选类别设置使用ObservableCollection,并且包含SettingKey和SettingValue的模型类应该实现INotifyPropertyChanged接口,如以下示例代码所示。如果操作正确,则无论UI中发生什么更改(在您的情况下,文本框的文本更改)都将自动反映在ObservableCollection中的模型对象中。如果您有兴趣了解更多关于如何工作的信息,我建议您在Windows Phone开发中搜索mvvm设计模式

public class Setting : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private string _settingKey;

    public string SettingKey
    {
        get { return _settingKey; }
        set { 
            _settingKey = value;
            OnPropertyChanged("SettingKey");
        }
    }

    private string _settingValue;

    public string SettingValue
    {
        get { return _settingValue; }
        set {
            _settingValue = value;
            OnPropertyChanged("SettingValue");
        }
    }


    public virtual void OnPropertyChanged(string propertyName)
    {
        var propertyChanged = PropertyChanged;
        if (propertyChanged != null)
        {
            propertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

您需要的是这样一种方法:

var textBoxes = AllTextBoxes(this);

public List<TextBox> AllTextBoxes(DependencyObject parent)
{
    var list = new List<TextBox>();
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
    {
        var child = VisualTreeHelper.GetChild(parent, i);
        if (child is TextBox)
        {
            list.Add(child as Control);
            continue;
        }
        list.AddRange(AllChildren(child));
    }
    return list;
}
var textboxs=所有文本框(此);
公共列表所有文本框(DependencyObject父对象)
{
var list=新列表();
for(int i=0;i
谢谢您的帮助!!但我的问题是一次访问所有文本框内容,以保存在本地存储中的某个文件中。正如您可以看到上面的“设置值”文本框。假设我在“SelectedCategorySettings”中已经有一些值,这意味着页面上将有许多文本框。现在,假设我已经编辑了其中一些文本框,并希望将它们保存回某个文件,比如本地存储中的JSON。由于这些文本框是动态创建的,因此我希望访问要保存到文件中的内容。我怎么做?是的,我理解你的问题。但问题是,您试图访问ItemsControl创建的文本框,就像使用xaml按名称或类似内容创建的文本框一样。但这不是在windows phone中执行此操作的方式。您需要使用mvvm模式,就像我在上面的回答中解释的那样。如果操作正确,“SelectedCategorySettings”中的值将在用户在文本框中键入和更改值时由ui自动更新。然后,您可以从“SelectedCategorySettings”本身获取新值。因此,您不需要显式访问文本框来获取新值。