[英]How to access textbox values inside tabItems for storing
如果标题不好,我深表歉意,我不知道该如何表达自己的意见。
我有一个用C#,WPF编写的程序,其中有许多TabItem。 在这些TabItem中,我有几个文本框,复选框等。在这些“主要” TabItem中,还包含了包含文本框,复选框等的其他TabItem。我要做的是能够将这些控件中的所有值存储在xml文件中。 我已经通过站在一个主要的TabItems中并执行以下代码来对所有可见的对象执行此操作:
List<TextBox> allTxt = FindVisualChildren<TextBox>(this).ToList<TextBox>(); // this here is my MainWindow (Interaction logic for MainWindow.xaml)
foreach (TextBox t in allTxt)
list.Add(t.Name + ":" + t.Text); // list is a List I store these in
//The same goes later for checkboxes etc.
然后,我将它们存储在所需的文件中,对于可见的文件,它可以正常工作。 但是,如何包含所有“第二个” TabItem中的所有控件以及“主要”中的所有控件呢? 我已经测试过在第一个完成后将Selected TabItem更改为增加该值,但这似乎不起作用...
也许有点“强力”方法,但它很干净而且易于阅读...
List<String> textBoxes = new List<String>();
List<String> checkBoxes = new List<String>();
foreach (TabPage mainPage in mainTabControl.TabPages)
{
foreach (Control c in mainPage.Controls)
{
if (c is TabControl)
{
foreach (TabPage secondPage in ((TabControl)c).TabPages)
{
foreach (Control c2 in secondPage.Controls)
{
if (c is CheckBox)
checkBoxes.Add(((CheckBox)c).Name + ":" + (((CheckBox)c).Checked ? "True" : "False"));
else if (c is TextBox)
textBoxes.Add(((TextBox)c).Name + ":" + (((TextBox)c).Text));
//... add more for other controls to capture
}
}
}
else
{
if (c is CheckBox)
checkBoxes.Add(((CheckBox)c).Name + ":" + (((CheckBox)c).Checked ? "True" : "False"));
else if (c is TextBox)
textBoxes.Add(((TextBox)c).Name + ":" + (((TextBox)c).Text));
//... add more for other controls to capture
}
}
}
您应该给内部标签指定名称,然后使用它们的名称搜索tham。 在这里您可以找到一些解释: 按名称查找控件
作为迭代所有控件的替代方法,您还可以考虑对它们进行数据绑定。 这样,您只需要从数据源获取数据并将其写入XML文件即可。
类中的每个控件都必须有一个属性,在XAML中,您必须将每个控件绑定到其属性。 然后,您必须将窗口的数据上下文设置为该类的实例。
您可能需要阅读一些有关WPF数据绑定的信息 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.