Silverlight 3中的自动选项卡

Silverlight 3中的自动选项卡,第1张

概述我需要能够从一个控件自动选项卡到SL3应用程序中的“下一个控件”.例如,TextBox限制为3个字符 – 在键入第3个字符时,焦点应自动移动到表单上的下一个控件(我的实际用法略有不同,但该示例就足够了). 然而,由于SL自动确定标签序列,除了逆向工程/复制Silverlight的逻辑以确定可视树中的哪个控件应该是获得焦点的下一个控件之外,似乎没有办法做到这一点. 有没有人实现过这个? 我正在寻找一 我需要能够从一个控件自动选项卡到SL3应用程序中的“下一个控件”.例如,TextBox限制为3个字符 – 在键入第3个字符时,焦点应自动移动到表单上的下一个控件(我的实际用法略有不同,但该示例就足够了).

然而,由于SL自动确定标签序列,除了逆向工程/复制Silverlight的逻辑以确定可视树中的哪个控件应该是获得焦点的下一个控件之外,似乎没有办法做到这一点.

有没有人实现过这个?

解决方法 我正在寻找一个相当普遍的解决方案 – 但我已经能够做一些相当具体的事情 – 基本上它使用VisualTreeHelper来查找与我想要旁边的控件相同的父项的子项,并将焦点设置为那.

这是一个比通过我的所有控件(这是一个相当大的LOB应用程序)更适合的解决方案,并为每个控件配置“下一步”控件.

这是我的代码,以防它帮助其他人. (VisualTreeeHelperUtil是我自己的一个类,它为VisualTreeHelper添加了一些实用工具)

public static voID TabNext(DependencyObject parentElement,Control fromControl){    var children = VisualTreeHelperUtil.FindChildren<Control>(parentElement).        Where(c => c.IsEnabled && c.IsTabStop && c.Visibility == Visibility.Visible).        ToList();    if (children.Contains(fromControl))    {        var thisIndex = children.IndexOf(fromControl);        var targetIndex = thisIndex + 1;        if (children.Count > targetIndex)        {            var targetChild = children[targetIndex];            fromControl.dispatcher.BeginInvoke(() =>               {                   targetChild.Focus();                   var txt = targetChild as TextBox;                   if (txt != null)                   {                       txt.SelectAll();                   }               });        }    }}
总结

以上是内存溢出为你收集整理的Silverlight 3中的自动选项卡全部内容,希望文章能够帮你解决Silverlight 3中的自动选项卡所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1004842.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存