WPF中实现强制TextBox失去焦点

WPF中实现强制TextBox失去焦点WPF 添加 TextBox 输入时,常希望输入完后,点击文本框外输入立即生效。 原生的 TextBox 似乎没有这样的功能,所以找到如下方式来曲线实现前述效果,即通过强制使 TextBox 失去焦点实现。 目前还没找到其他更优雅的方法。 添加不可见的 TextBox 用来接收…

为建立中文知识库加块砖        ——中科大胡不归

问题描述

WPF 添加 TextBox 输入时,常希望输入完后,点击文本框外输入立即生效。

原生的 TextBox 似乎没有这样的功能,所以找到如下方式来曲线实现前述效果,即通过强制使 TextBox 失去焦点实现。

目前还没找到其他更优雅的方法。

解决办法

  1. 添加不可见的 TextBox 用来接收焦点,并增加 MouseDown 事件用来响应鼠标点击。
<Window x:Class="Kavand.WpfTextBoxStyle.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525">
    <Grid>
        <!-- 不可见的TextBox -->
        <TextBox x:Name="FocusHolder" Width="0"/>
        <ScrollViewer MouseDown="UIElement_OnMouseDown">
            <StackPanel>
                <WrapPanel>
                    <TextBox Style="{DynamicResource SimpleTextBox}" Text="My text...Top"/>
                </WrapPanel>
                
                <!-- PlaceHolder -->
                <Canvas Height="300"></Canvas>
                <WrapPanel>
                    <TextBox Style="{DynamicResource SimpleTextBox}" Text="My text...Center"/>
                </WrapPanel>
                
                <!-- PlaceHolder -->
                <Canvas Height="300"></Canvas>
                <WrapPanel>
                    <TextBox Style="{DynamicResource SimpleTextBox}" Text="My text...Bottom"/>
                </WrapPanel>
            </StackPanel>
        </ScrollViewer>
    </Grid>
</Window>

采用Grid布局可以避免在类似 ScrollViewer 的长布局中,FocusHolder 获得焦点后,页面会跳转到 FocusHolder 处。

  1. 当鼠标点击到正在的编辑的 TextBox 外部时,触发 MouseDown 事件,我们在事件中使前面的 TextBox 失去焦点
    public partial class MainWindow {
        public MainWindow() {
            InitializeComponent();
        }

        private void UIElement_OnMouseDown(object sender, MouseButtonEventArgs e)
        {
            //FocusHolder获得焦点将使正在编辑的 TextBox 失去焦点
            FocusHolder.Focus();
        }
    }

效果如下:

WPF中实现强制TextBox失去焦点

参考文章

  1. WPF中textbox强制失去焦点
  2. wpf-如何实现文本框外部单击时移除焦点?

今天的文章WPF中实现强制TextBox失去焦点分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/17334.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注