首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#和LinqToXml中使用WPF创建纸质表单的无纸化在线版本时对字段导航进行编码

在C#和LinqToXml中使用WPF创建纸质表单的无纸化在线版本时对字段导航进行编码
EN

Stack Overflow用户
提问于 2010-10-28 20:21:01
回答 1查看 101关注 0票数 0

使用WPF(使用C#和LinqToXml),我正在复制现有纸质表单的无纸化版本。现有表单包括一些每个框一个字符的文本字符串。我已经使用XAML复制了纸质表单的外观。如何向单字符TextBox添加代码,以便在填充后自动将控制发送到下一个TextBox (而不需要用户使用Tab键切换到下一个TextBox)?此外,这些TextBox序列便于关键字段值的输入。一旦最后一个单字符的TextBox从键盘接收到一个值,我如何编写一个事件触发器来自动从Xml数据文件中检索适当的数据记录字段值?我是否需要在表单上包含一个按钮,或者是否可以对表单进行编码,以便在填写最后一个单字符的TextBox时自动进行检索?

EN

回答 1

Stack Overflow用户

发布于 2010-10-29 07:31:47

要实现您想要做的事情,最好的方法可能是创建一个类来表示代码,该类通过绑定到textboxes的属性(或通过一个属性作为字符串,然后使用ValueConverter更新相应的数字)公开数字,并实现INotifyPropertyChanged接口(每次设置属性时都会引发PropertyChanged事件)。然后,您可以创建一个从代码对象侦听PropertyChanged事件的处理程序,检查所有数字是否已填写,如果是,则从XML加载数据。或者,您也可以在对象内部执行该检查,然后引发其他事件,让应用程序知道输入了完整的代码。

至于如何移动到下一个文本框,您可以创建一个调用UIElement.MoveFocus()方法的TextChanged事件处理程序,并将其注册到所有文本框中,如下所示:

代码语言:javascript
复制
    private void textChanged(object sender, TextChangedEventArgs e)
    {
        TextBox textBox = sender as TextBox;

        if (textBox != null && textBox.Text.Length == 1)
        {
            TraversalRequest tr = new TraversalRequest(FocusNavigationDirection.Next);
            textBox.MoveFocus(tr);
        }
    }

您可能还希望将每个文本框的MaxLength设置为1,以防止复制和粘贴文本等,您还可以查看类似ValidationRules的内容,以检查非法字符等。

希望这对你有所帮助(只要问你是否需要帮助)。

向您致敬,詹姆斯

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4042835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档