Windows phone 如何在windows phone运行时从所有文本框(其中动态创建文本框)访问文本
我一直在尝试从文本框集合中获取文本,这些文本框是通过使用items控件将集合绑定到stackpanel而动态创建的,该控件位于单独的用户控件中,我正在windows phone运行时将其加载到页面上 下面是我的UserControl的代码: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
<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”本身获取新值。因此,您不需要显式访问文本框来获取新值。