如何访问tabItems中的文本框值以进行存储

时间:2013-06-05 10:43:03

标签: c# wpf tabitem

如果标题不好我道歉,我不知道如何表达自己对这个问题的看法。

我有一个用C#编写的程序,WPF,我有很多TabItems。在这些TabItems中,我有几个文本框,复选框等。在这些“主要”TabItems内部还有包含文本框,复选框等的其他TabItems。我想要做的是能够存储所有值这些控件在xml文件中。我已经设法通过站在其中一个主TabItem并执行以下代码来完成所有可见的:

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的所有控件以及“主要”TabItem中的所有控件呢? 我已经测试过更改Selected TabItem以在第一个完成之后增加这个,但这似乎不起作用......

Basic sketch of the program (and No, I did not receive a good grade "art class")

3 个答案:

答案 0 :(得分:1)

也许是一种“蛮力”的方法,但它干净且易于阅读......

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
        }
    }
}

答案 1 :(得分:0)

您应该为内部标签指定名称,然后使用其名称搜索tham。您可以在此处找到一些解释:find control by name

答案 2 :(得分:0)

作为迭代所有控件的替代方法,您还可以考虑对它们进行数据绑定。这样,您只需从数据源获取数据并将其写入XML文件。

类中的每个控件都必须有一个属性,在XAML中,您必须将每个控件绑定到其属性。然后,您必须将窗口的数据上下文设置为类的实例。

您可能想了解一下WPF data binding