【问题标题】:How to dynamically access element names in XAML?如何动态访问 XAML 中的元素名称?
【发布时间】:2009-03-26 09:35:03
【问题描述】:

我有一个用户填写的 XAML 输入表单。

我想验证这个表单。

我有一个集合中的字段信息,我想循环并检查每个字段。

但是当它在字符串中时,我如何访问字段的名称,例如当 fieldInformation.FieldName = "CompanyName" 我想检查 "Field_CompanyName.Text"。

伪代码:

foreach (var fieldInformation in _fieldInformations)
{
    if (Field_{&fieldInformation.FieldName}.Text.Length > 2)
    {
        ErrorMessage.Text = String.Format("The length of {0} is too long, please correct.", fieldInformation.FieldName);
        entryIsValid = false;
    }
}

XAML:

<StackPanel Orientation="Horizontal" Margin="10 10 10 0">
    <TextBlock Width="150" Text="Customer ID:"/>
    <TextBox x:Name="Field_CustomerID" Width="150" MaxLength="5" Text=""/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="10 10 10 0">
    <TextBlock Width="150" Text="Company Name:"/>
    <TextBox x:Name="Field_CompanyName" Width="150" MaxLength="40" Text=""/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="10 10 10 0">
    <TextBlock Width="150"  Text="Contact Name:"/>
    <TextBox x:Name="Field_ContactName" Width="150" MaxLength="30" Text=""/>
</StackPanel>

代码隐藏:

_fieldInformations.Add(new FieldInformation { FieldName = "CustomerID", FieldSize = 5 });
_fieldInformations.Add(new FieldInformation { FieldName = "CompanyName", FieldSize = 40 });
_fieldInformations.Add(new FieldInformation { FieldName = "ContactName", FieldSize = 30 });

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    这不只是文件隐藏代码中的 FindName 调用还是我遗漏了什么?

    TextBox fieldTB = (TextBox)this.FindName("Field_CompanyName");
    

    【讨论】:

      【解决方案2】:

      此外,如果您愿意从代码中添加 UI 元素,则必须使用 RegisterName("Field_CompanyName", some_instance) 方法调用,因为默认情况下 FindName 仅适用于 XAML 中声明的元素。

      【讨论】:

        猜你喜欢
        • 2010-09-06
        • 1970-01-01
        • 2021-12-20
        • 1970-01-01
        • 2015-11-20
        • 2011-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多