在WPF中实现一个弹出层自动获取焦点,弹出层实现是通过其UserControl的依赖属性Visibility的绑定实现的,让UserControl上的TextBox获取焦点,初始实现代码如下:

public Visibility IsVisibile

{

get { return (Visibility)GetValue(IsVisibileProperty); }

set { SetValue(IsVisibileProperty, value); }

}

public static readonly DependencyProperty IsVisibileProperty =

DependencyProperty.Register("IsVisibile", typeof(Visibility), typeof(WordsKeyboard), new PropertyMetadata(Visibility.Collapsed,new PropertyChangedCallback((d,e)=>

{

if((Visibility)e.NewValue==Visibility.Visibile)

(d as MainUserControl).textBox.Focus();

})));

但是第一次弹出该层的时候焦点未在textBox上,除了第一次弹出未获取到焦点后面的弹出都获取到了,为了解决第一次弹出层的TextBox未获取到焦点采用了定时器延时的方法,解决方案如下:

///

/// 定义个定时器

///

DispatcherTimer timer = new DispatcherTimer();

///

/// 构造方法

///

public MainUserContrl()

{

InitializeComponent();

timer.Interval = new TimeSpan();

timer.Tick += timer_Tick;

}

///

/// 定时器间隔执行方法

///

///

///

void timer_Tick(object sender, EventArgs e)

{

this.MainText.Focus();

timer.Stop();

}

///

/// 控制改用户控件显示隐藏的依赖属性

///

public Visibility IsVisibile

{

get { return (Visibility)GetValue(IsVisibileProperty); }

set { SetValue(IsVisibileProperty, value); }

}

public static readonly DependencyProperty IsVisibileProperty =

DependencyProperty.Register("IsVisibile", typeof(Visibility), typeof(WordsKeyboard), new PropertyMetadata(Visibility.Collapsed,new PropertyChangedCallback((d,e)=>

{

if((Visibility)e.NewValue==Visibility.Collapsed)

(d as WordsKeyboard).KillKeyboard();

else

{

(d as MainUserControl).timer.Start();//开启定时器,让textBox获取到焦点

}

})));

通过延时的方法就可以解决掉弹出层第一次无法获取焦点的问题了!而后面让textbox在能使用的情况下不能失去焦点(除非点击弹出层的关闭按钮,让弹出层消失),初始实现代码如下:

///

/// textBox失去焦点事件

///

///

///

private void textBox_LostFocus(object sender,RoutedEventArgs e)

{

if(textBox.IsEnabled&&!btnCancle.IsFocused)

textBox.Focus();

}

上述实现,会出现死循环,假如不出现死循环btnCancle.IsFocused的值一直是false,因为取消按钮一直没有获取到焦点!而解决方案实现如下:

DispatcherTimer timerLoseFocuse = new DispatcherTimer();

timerLoseFocuse.Interval = new TimeSpan(,,,,);

timerLoseFocuse.Tick+=(s,e)=>

{

if(CardNumArea.IsEnabled&&!BtnCancel.IsFocused)

{

this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Render,new Action(()=>

{

t.extBox.Focus();

}));//改方法能解决掉LoseFocuse出现死循环的问题

}

timerLoseFocuse.Stop();

};

///

///失去焦点事件

///

private void textBox_LostFocus(object sender, RoutedEventArgs e)

{

timerLoseFocuse.Start();

}

通过定时器解决取消按钮无法获取到获取到焦点的问题,否则点击取消无法执行其点击事件

WP8.1&Win10开发:TextBox获取和失去焦点小技巧

获取焦点:用Focus方法让Textbox获取焦点.代码示例:textbox.Focus(FocusState.Pointer); 失去焦点:让其他控件获取焦点,如Textblock控件(注意要将Te ...

WPF 在TextBox失去焦点时检测数据,出错重新获得焦点解决办法

WPF 在TextBox失去焦点时检测数据,出错重新获得焦点解决办法 在WPF的TextBox的LostFocus事件中直接使用Focus()方法会出现死循环的问题 正确的使用方式有2中方法: 方法一 ...

【msdn wpf forum翻译】获取当前窗口焦点所在的元素

wpf使某个控件失去焦点_WPF的TextBox的焦点获取与失去焦点的死循环解决方案相关推荐

  1. wpf使某个控件失去焦点_WPF 在TextBox失去焦点时检测数据,出错重新获得焦点解决办法...

    在WPF的TextBox的LostFocus事件中直接使用Focus()方法会出现死循环的问题 正确的使用方式有2中方法: 方法一: privatevoidtextBox3_LostFocus(obj ...

  2. WPF之DataGrid控件使用

    WPF之DataGrid控件使用 一.DataGrid简介 二.DataGrid数据源绑定 三.DataGrid单元格编辑触发事件 四.DataGrid增加删除行 五.DataGrid数据触发器 参考 ...

  3. WPF 自定义DataGrid控件样式

    WPF 自定义DataGrid控件样式 样式一: 样式代码: <!--DataGrid样式--><Style TargetType="DataGrid">& ...

  4. WPF的Popup控件使用

    WPF控件学习总结系统系列 文章目录 WPF控件学习总结系统系列 前言 一.使用场景 二.使用步骤 1.前端界面 2.属性说明 展示效果 总结 参考学习出处 前言 WPF使用popup控件实现弹出式提 ...

  5. WPF查找子控件和父控件方法

    原文:WPF查找子控件和父控件方法 public List<T> GetChildObjects<T>(DependencyObject obj, string name) w ...

  6. WPF 动画显示控件

    原文:WPF 动画显示控件 当我们要显示一个控件的时候,不仅仅要显示这个控件,还要有动画的效果. 主要用到了DoubleAnimation类. public static void ShowAnima ...

  7. WPF的Timer控件的使用

    原文:WPF的Timer控件的使用 通过System.Threaing.Timer控件来实现"初始加载页面时为DataGrid的模版列赋初始值" System.Threaing.T ...

  8. Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决

    Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决 参考文章: (1)Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决 (2)https://www. ...

  9. WPF之复杂形状控件

    WPF之复杂形状控件 原文:WPF之复杂形状控件 有的时候想将一张图片变成一个按钮.当然这里不是单纯讲图片作为按钮的背景. 这两者是有区别的: 前者图片即按钮,比如你有一个空心的圆圈,当你点击中间空心 ...

最新文章

  1. 集合处理后,按原先输入的字符串顺序排序
  2. SendEmail使用TLS发送邮件
  3. SpringBoot框架(4)-- 类装配及Bean装配监听器
  4. 在选择屏幕的标准应用工具条上增加自定义按钮
  5. python算法与数据结构-希尔排序算法
  6. 滴滴李先刚:语音识别在复杂场景的性能将显著提升
  7. Javascript 多线程编程​的前世今生
  8. c位边上还有什么位_【一点资讯】那些有趣而搞笑的GIF动画:为让出c位,站边上拍照还是谦虚礼貌的 www.yidianzixun.com...
  9. Java 算法数字黑洞
  10. 异常连接导致的内存泄漏排查
  11. 网课题库API接口 对接教程
  12. Vue.js 基础入门
  13. Spring Boot 接口文档工具对比
  14. 网页游戏外挂资料(转)
  15. 解决“手机锂电池无输出电压,无法充电”
  16. python创意turtle作品大白-Python turtle 画个大白
  17. 语音/视频转文字的工具选择它-不仅仅是好用还免费
  18. 董明珠的“接班人”出现了!这个22岁小姑娘,凭什么?
  19. LaTex常用命令介绍
  20. 安信可Combo固件常见应用示例集合,适用RTL8720系列 / Ai-WB2系列模组

热门文章

  1. Java Web应用(JSP/Session/Cookie)
  2. 史上最全的Java判断是否为中文字符
  3. pip 下载离线安装包及离线安装地方三库
  4. Java实例方法、实例变量、类方法、类变量
  5. java使用idea编译或者打包时出现There are test failures
  6. 国家制定甲型流感中药方 市民可食用预防
  7. 华硕 您的计算机无法启动,华硕电脑无法开机怎么办
  8. java自动装箱和自动拆箱
  9. python+selenium实现学术网站上的pdf下载
  10. 小张学算法之音视频算法:2.jpeg图像压缩算法