wpf使某个控件失去焦点_WPF的TextBox的焦点获取与失去焦点的死循环解决方案
在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的焦点获取与失去焦点的死循环解决方案相关推荐
- wpf使某个控件失去焦点_WPF 在TextBox失去焦点时检测数据,出错重新获得焦点解决办法...
在WPF的TextBox的LostFocus事件中直接使用Focus()方法会出现死循环的问题 正确的使用方式有2中方法: 方法一: privatevoidtextBox3_LostFocus(obj ...
- WPF之DataGrid控件使用
WPF之DataGrid控件使用 一.DataGrid简介 二.DataGrid数据源绑定 三.DataGrid单元格编辑触发事件 四.DataGrid增加删除行 五.DataGrid数据触发器 参考 ...
- WPF 自定义DataGrid控件样式
WPF 自定义DataGrid控件样式 样式一: 样式代码: <!--DataGrid样式--><Style TargetType="DataGrid">& ...
- WPF的Popup控件使用
WPF控件学习总结系统系列 文章目录 WPF控件学习总结系统系列 前言 一.使用场景 二.使用步骤 1.前端界面 2.属性说明 展示效果 总结 参考学习出处 前言 WPF使用popup控件实现弹出式提 ...
- WPF查找子控件和父控件方法
原文:WPF查找子控件和父控件方法 public List<T> GetChildObjects<T>(DependencyObject obj, string name) w ...
- WPF 动画显示控件
原文:WPF 动画显示控件 当我们要显示一个控件的时候,不仅仅要显示这个控件,还要有动画的效果. 主要用到了DoubleAnimation类. public static void ShowAnima ...
- WPF的Timer控件的使用
原文:WPF的Timer控件的使用 通过System.Threaing.Timer控件来实现"初始加载页面时为DataGrid的模版列赋初始值" System.Threaing.T ...
- Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决
Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决 参考文章: (1)Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决 (2)https://www. ...
- WPF之复杂形状控件
WPF之复杂形状控件 原文:WPF之复杂形状控件 有的时候想将一张图片变成一个按钮.当然这里不是单纯讲图片作为按钮的背景. 这两者是有区别的: 前者图片即按钮,比如你有一个空心的圆圈,当你点击中间空心 ...
最新文章
- 集合处理后,按原先输入的字符串顺序排序
- SendEmail使用TLS发送邮件
- SpringBoot框架(4)-- 类装配及Bean装配监听器
- 在选择屏幕的标准应用工具条上增加自定义按钮
- python算法与数据结构-希尔排序算法
- 滴滴李先刚:语音识别在复杂场景的性能将显著提升
- Javascript 多线程编程​的前世今生
- c位边上还有什么位_【一点资讯】那些有趣而搞笑的GIF动画:为让出c位,站边上拍照还是谦虚礼貌的 www.yidianzixun.com...
- Java 算法数字黑洞
- 异常连接导致的内存泄漏排查
- 网课题库API接口 对接教程
- Vue.js 基础入门
- Spring Boot 接口文档工具对比
- 网页游戏外挂资料(转)
- 解决“手机锂电池无输出电压,无法充电”
- python创意turtle作品大白-Python turtle 画个大白
- 语音/视频转文字的工具选择它-不仅仅是好用还免费
- 董明珠的“接班人”出现了!这个22岁小姑娘,凭什么?
- LaTex常用命令介绍
- 安信可Combo固件常见应用示例集合,适用RTL8720系列 / Ai-WB2系列模组