-
2022-07-29 15:36:37
项目场景:
初始化一个WPF页面后需要让其中一个TextBox获取焦点
问题描述
初始化一个WPF页面后需要在ViewModel中进行设置让其中一个TextBox获取焦点,但是用textBox1.Focusable = true;无效。
最后改为Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Render, new Action(() => textBox1.Focus()));后实现预想效果
Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Render, new Action(() => textBox1.Focus()));
更多相关内容 -
WPF TextBox实现按字节长度限制输入功能
2020-08-28 21:40:19主要为大家详细介绍了WPF TextBox实现按字节长度限制输入功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
WPF 获取TextBlock或者TextBox的内容像素宽度(Width)
2022-04-11 14:20:321、首先获取DPI,系统的显示缩放影响Width dpiInfo = VisualTreeHelper....var formattedText = new FormattedText("文本值", System.Globalization.CultureInfo.InvariantCulture, FlowDirection.LeftToRight, ...1、首先获取DPI,系统的显示缩放影响Width
dpiInfo = VisualTreeHelper.GetDpi(this);
2、根据文字的字体、大小等等因素获取像素宽度
var formattedText = new FormattedText("文本值", System.Globalization.CultureInfo.InvariantCulture,
FlowDirection.LeftToRight,
new Typeface(this.TextBlockName.FontFamily,
this.TextBlockName.FontStyle,
this.TextBlockName.FontWeight,
this.TextBlockName.FontStretch),
this.TextBlockName.FontSize,
Brushes.Black, dpiInfo.PixelsPerDip);控件内容的宽度:formattedText.WidthIncludingTrailingWhitespace;
TextBlockName是控件的名称
-
WPF(6)WPF之TextBox控件
2022-04-09 22:37:51WPF(1)WPF工程创建 WPF(2)WPF之Image组件 WPF(5)WPF之DataGrid控件 文章目录系列文章目录TextBox控件的基本使用一、什么是TextBox?二、TextBox的使用1.单行TextBox2.Text属性前台与后台的运行时机3.多行...系列文章目录
WPF(1)WPF工程创建
WPF(2)WPF之Image组件
WPF(3)WPF之Button组件
WPF(5)WPF之DataGrid控件
文章目录
TextBox控件的基本使用
一、什么是TextBox?
TextBox控件是WPF的文本输入控件,使用户输入录入系统数据的入口之一。有了此控件,用户可以将数据按照软件的流程录入进去。它允许用户输入一行或多行数据。
二、TextBox的使用
1.单行TextBox
最简单的使用方法如下:
<Window x:Class="WPF006_TextBox.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WPF006_TextBox" mc:Ignorable="d" Title="MainWindow" Height="600" Width="400"> <StackPanel Margin="10"> <TextBox/> </StackPanel> </Window>
效果如下:
如果想要在TextBox控件中预先设定文本的话需要结合TextBox的Text属性
在后台程序中,也可以通过此属性做控件内容上的获取及设置。2.Text属性前台与后台的运行时机
当xaml文档中设置了Text属性的值,后台通过代码动态设置Text属性会先执行哪一个呢?
前台代码如下:
<Window x:Class="WPF006_TextBox.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WPF006_TextBox" mc:Ignorable="d" Title="MainWindow" Height="300" Width="400"> <StackPanel Margin="10"> <TextBox Name="MyTextBox" Text="你好,TextBox!"/> </StackPanel> </Window>
后台代码如下:
using System.Windows; namespace WPF006_TextBox { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.MyTextBox.Text = "这是修改后的!"; } } }
运行的结果如下:
结果显示如上图,结合之前的内容,我们可以知道。最后执行了后台的代码。原因是InitializeComponent();
InitializeComponent();方法会初始化组件,在xaml中设置的Text的值也执行过,只不过被后来的后台代码
this.MyTextBox.Text = "这是修改后的!";
覆盖过了而已。
当我们把以上两行代码互换位置如下:后台代码:
using System.Windows; namespace WPF006_TextBox { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { this.MyTextBox.Text = "这是修改后的!"; InitializeComponent(); } } }
效果如下:
就会引发异常,原因是初始化函数并未完成,此时this.MyTextBox还不存在,因此是空指针异常。
所以我们所有的使用控件的逻辑都要放在初始化函数之后调用。3.多行文本框
在很多是时候程序需要用户输入大量文字,使用单行的TextBox就有点捉襟见肘了。那么我们就希望有一个控件能拥有这样的能力。而TextBox恰恰也具备这种能力,而且非常简单。
前台代码如下:
后台代码不变<Window x:Class="WPF006_TextBox.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WPF006_TextBox" mc:Ignorable="d" Title="MainWindow" Height="300" Width="400"> <StackPanel Margin="10"> <TextBox Name="MyTextBox" Text="你好,TextBox!"/> <TextBox TextWrapping="Wrap"/> </StackPanel> </Window>
效果如下:
前台代码如下:
后台代码不变<Window x:Class="WPF006_TextBox.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WPF006_TextBox" mc:Ignorable="d" Title="MainWindow" Height="300" Width="400"> <StackPanel Margin="10"> <TextBox Name="MyTextBox" Text="你好,TextBox!"/> <TextBox TextWrapping="Wrap"/> </StackPanel> </Window>
3.1 换行属性AcceptsReturn
当我们希望文字换行时,我们可以在添加一个属性–AcceptsReturn
该属性默认值是false,表示不接受换行
当属性值设置True时,在光标处按下Enter键即可换行前台代码:
<Window x:Class="WPF006_TextBox.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WPF006_TextBox" mc:Ignorable="d" Title="MainWindow" Height="300" Width="400"> <StackPanel Margin="10"> <TextBox Name="MyTextBox" Text="你好,TextBox!"/> <TextBox AcceptsReturn="True" TextWrapping="Wrap"/> </StackPanel> </Window>
效果如图:
总结
好了,本篇文章在不在啰嗦了!如果您感觉OK记得点赞、关注、转发!谢谢!
以上就是今天要讲的有关TextBox控件的内容,若有不足,望大佬能够给予批评与修正! -
WPF 控件专题 TextBox控件详解
2022-06-23 16:37:20WPF 控件专题 TextBox控件详解1、TextBox 介绍
TextBox :文本输入框控件,是WPF中最基本的文字输入控件。它允许最终用户在一行、对话输入、或多行编写,就像是个编辑器。
尝试在文本框里鼠标右击。你会得到一个选项菜单,允许你和Windows剪贴板一块使用这个TextBox。默认的撤销和重做的键盘快捷方式(Ctrl + Z 和 Ctrl + Y)也应该是起作用的,并且所有这些功能你能够不受限制的使用。
特别要注意:
TextBox 具有对浮泡 MouseUp 和 MouseDown 事件的内置处理。 因此,将不调用侦 MouseUp 听的自定义事件处理程序或 MouseDown 从中 TextBox 侦听的事件。 如果需要响应这些事件,请改为侦听隧道 PreviewMouseUp 和 PreviewMouseDown 事件,或将处理程序注册到 HandledEventsToo 参数 (后一个选项只能通过代码) 使用。 请勿标记所处理的事件,除非有意禁用 TextBox 对这些事件的本机处理,并且请注意,这对控件的 UI 有显著影响。**************************************************************************************************************
2、常用属性介绍
Background:背景; BorderBrush:边框背景的颜色; BorderThickness:边框宽度;
CanRedo:是否可重做最新的撤消操作; CanUndo:是否可撤消最新的操作;
CaretIndex:获取或设置插入符号的插入位置索引。
FlowDirection:获取或设置文本和其他用户界面 (UI) 元素在控制其布局的任何父元素内流动的方向。
Focusable:焦点获取; FontWeight:字体的粗细;Foreground:前景色;
FontFamily:字体样式; FontSize:字体大小; FontStretch:字体在屏幕上紧缩或加宽的程度。
HorizontalAlignment/VerticalAlignment:获取或设置在父元素中组合此元素时所应用的水平对齐特征/垂直对齐特征。
HorizontalContentAlignment/VerticalContentAlignment:获取或设置控件内容的水平对齐方式/垂直对齐方式。
HorizontalScrollBarVisibility/VerticalScrollBarVisibility:是否显示水平滚动条/垂直滚动条;
HorizontalOffset/VerticalOffset:获取和设置水平滚动条的位置/垂直滚动条的位置;
IsEnabled:使能,是否可用; IsReadOnly:对用户而言是否只读;
IsUndoEnabled:是否支持撤销功能; LineCount:文本总行数;
MaxLength:在文本框中手动输入的最大字符数。
MaxLines/MinLines:最大可见行数/最小行数。
Name:元素标识名称; Opacity:透明度;
SelectedText:文本框中当前选择的内容。SelectionBrush:突出显示选定文本的画笔。
SelectionLength:文本框中当前选择的字符数。SelectionOpacity:选择文本的透明度。
SelectionStart:当前选择的起始位置的字符索引。
SelectionTextBrush:选中文本的颜色;
Text:文本框的文本内容。
TextAlignment:文本框内容的水平对齐方式。
TextWrapping:文本框中文本的换行方式。**************************************************************************************************************
3、具体代码示例
<StackPanel Margin="10"> <!--添加一个名为txtbox1的TextBox,外边距为10、宽度200、高度35、水平居中、垂直居中--> <TextBox x:Name="txtbox1" Margin="10" Width="200" Height="35" HorizontalAlignment="Center" VerticalAlignment="Center" > 秋风清,秋月明,落叶聚还散,寒鸦栖复惊,相思相见知何日,此时此夜难为情。 </TextBox> <!--添加一个名为txtbox2的TextBox,宽度200、高度80、水平居左、垂直居中、前景色为OrangeRed、 背景色为Wheat、边框颜色为Cyan,边框宽度为1,文本内容水平居中垂直居中--> <TextBox x:Name="txtbox2" Margin="10 0 10 0" Width="200" Height="80" HorizontalAlignment="Left" VerticalAlignment="Center" Foreground="OrangeRed" Background="Wheat" BorderBrush="Cyan" BorderThickness="1" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" TextWrapping="Wrap"> 秋风清,秋月明,落叶聚还散,寒鸦栖复惊,相思相见知何日,此时此夜难为情。 </TextBox> <!--添加一个名为txtbox3的TextBox,宽度200、高度60、水平居左、垂直居中、前景色为OrangeRed、 背景色为Wheat、文本内容水平居中垂直居上、选中文本的颜色为YellowGreen,透明为0.5--> <TextBox x:Name="txtbox3" Width="200" Height="60" HorizontalAlignment="Right" VerticalAlignment="Center" Foreground="OrangeRed" Background="Wheat" HorizontalContentAlignment="Center" VerticalContentAlignment="Top" TextDecorations="Underline" SelectionBrush="YellowGreen" SelectionOpacity="0.5"> 秋风清,秋月明,落叶聚还散,寒鸦栖复惊,相思相见知何日,此时此夜难为情。 </TextBox> </StackPanel>
**************************************************************************************************************
4、效果图
**************************************************************************************************************
5、总结和扩展
TextBox:通过改写模板样式,可以实现水印输入框,密码框,以及各式各样的输入框。
AcceptsReturn决定了文本框是多行的,当你按下回车键时,换到下一行。TextWrapping使文字到达右边界时自动切换到下一行。
**************************************************************************************************************
-
WPF中Textbox获取TextChanged事件+键盘事件+右击菜单栏
2019-12-05 15:56:30键盘响应代码: private void textBox_KeyDown(object sender, KeyEventArgs e) { string strMessage = "textBox_KeyDown Event:" + e.RoutedEvent + " " + "Key:" + e.Key; if(listBox!=null) { ... -
WPF中TextBox绑定变量
2021-03-18 18:36:32WPF中TextBox绑定变量为什么要将TextBox绑定到变量第一步 前端TextBox绑定第二步 新建绑定类第三步 添加触发函数第四步 绑定类添加代码第五步 数据源的指定第六步 绑定变量的调用 为什么要将TextBox绑定到变量 开发... -
WPF之TextBox获得焦点
2020-05-16 09:36:50当 textBox.Focus();或 Keyboard.Focus(textBox)无效的时候,试试下面方法: this.Dispatcher.BeginInvoke(DispatcherPriority.Background,(Action)(() => { Keyboard.Focus(textBox); })); 实测有效 ... -
WPF 入门教程 TextBox详解
2021-09-24 18:09:22TextBox控件是WPF中最基本的文字输入控件。它允许最终用户在一行、对话输入、或多行编写,就像是个编辑器。 单行TextBox TextBox控件非常常用。你可以不使用任何属性,就能有一个完整并可编辑的文本字段。这里有一... -
WPF中TextBox只输入数字
2019-10-19 12:21:121、首先添加一个textbox,然后添加上去,一下修改的时候name属性并没有修改,所以还是labe,其中一句很重要的话就是要禁止输入法,否则当用复合键的时候回提交给输入法的Process来处理 <TextBoxx:Name="labe3... -
WPF 设置TextBox和PasswordBox设置光标位置
2021-03-25 11:29:05// 绑定txtBox组件获取焦点事件的函数 this.txtUserName.GotFocus += new RoutedEventHandler(txtUserName_GotFocus);// 用户名文本框 this.pwdPassword.GotFocus += new RoutedEventHandler(pwdPassword_GotFocus... -
WPF遍历TextBox
2018-01-03 15:10:12最近本菜鸟在学习WPF 想到Winform中的TextBox 遍历也就想到了 WPF中的 空间遍历,在网络上搜索了好多方法,感觉还是这个方法比较简单 foreach (UIElement element in ca.Children) { if (element is TextBox)... -
WPF的TextBox的焦点获取与失去焦点的死循环解决方案
2021-08-22 13:22:08WPF的TextBox的焦点获取与失去焦点的死循环解决方案 -
Wpf中通过绑定来更新textbox的值
2017-04-17 21:24:37wpf中要动态的改变textbox的值需要通过绑定来实现,下面我就一步一步讲解如何绑定。首先在MainWindow中定义了两个控件,一个button和一个textbox。并将这两个控件放在viewbox中。<Window x:Class="... -
WPF自制TextBox利用Validation验证来实现必填项和焦点的提示特效(升级版,实现应用于MVVM模式)
2013-01-09 21:05:48WPF自制TextBox利用Validation验证来实现必填项和焦点的提示特效。 此为专门为MVVM模式的实现。网上要么搜不到真实可用的,要么就是一大堆看不懂的机制绕路太远。我写了个简单明了的。希望可以帮助大家更好地利用... -
WPF 设置TextBox的输入法
2019-09-30 14:08:06使用WPF做Windows客户端开发时,如果需要控制输入框的输入语言,本文为读者介绍了两个控制输入模式的类,InputLanguageManager和InputMethod。用于控制输入法的语言,以及限制输入内容。 -
【WPF】TextBox 文本框中TextChanged事件
2019-04-16 17:20:21TextBox Grid.Row="5" Grid.Column="3" Text="{Binding XXX}" Grid.ColumnSpan="2" Margin="42,0,89,1" Style="{StaticResource XXStyle}" Height="39" VerticalAlignment="Bottom" > <i:I... -
WPF TextBox按字节长度限制输入
2021-12-07 07:57:46前两天做一个项目的时候,由于页面没有限制TextBox的输入长度,所以,后台直接报错了,超出数据库最大的长度。 数据库的长度是按照字节来计算的,而且不同的编码格式,汉字占用的字节长度又不相同,比如,我们用的... -
WPF TextBox水印效果制作方法详解
2020-08-29 09:11:23主要为大家详细介绍了WPF TextBox水印效果的制作方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
WPF textBox限制输入数字方法
2021-08-25 16:28:45第一步:在TextBox中添加属性 InputMethod.IsInputMethodEnabled="False" <TextBox x:Name="Barcode" Width="90" Height="26" Margin="2" BorderThickness="2" InputMethod.IsInputMethodEnabled="False" ... -
WPF扫码枪无焦点自动获取数据demo
2019-05-29 19:53:58博客讲解样例demo,欢迎下载!https://blog.csdn.net/luoqiang_sky/article/details/90676944 -
WPF的TextBox获得焦点时自动全部选择已有内容的方法
2018-08-20 11:58:43TextBox元素获得焦点时,可以用SelectAll()来选择已有文字,但不能直接用SelectAll()就得到想要的效果。其中一种方式是通过PreviewMouseDown\GotFocus\LostFocus的多个事件来完成,逻辑有些繁琐。每次都写这些就造成... -
WPF Slider与TextBox绑定
2020-08-18 14:55:45Slider与TextBox的数值绑定,可以在Slider绑定,亦可在TextBox绑定。 使用 1.TextBox绑定,注意UpdateSourceTrigger=PropertyChanged,Mode=TwoWay。 <Slider x:Name="slider" Maximum="100" ... -
如何获取和设置的WPF文本框的当前光标位置
2021-07-16 15:52:38I want to get the current cursor position from a WPF TextBox. If a TextBox contains text abhishek and cursor is blinking after abhi then i want that index, so that later after clearing textbox problem... -
WPF 在TextBox失去焦点时检测数据,出错重新获得焦点解决办法
2021-02-05 01:28:20在WPF的TextBox的LostFocus事件中直接使用Focus()方法会出现死循环的问题正确的使用方式有2中方法:方法一:privatevoidtextBox3_LostFocus(objectsender,RoutedEventArgse){if(textBox3.Text!="abc"){this.... -
【WPF】textbox ctrl+enter回车 enter触发button的click事件
2019-01-11 10:06:58WPF textbox ctrl+enter回车 enter触发button的click事件前言界面实现思路代码总结 前言 第一次写csdn博客,就记录一下一个小功能的实现吧,最近在做和微信相关的一个插件,其中有一块是仿照微信的发送功能,即在... -
WPF RichTextBox赋值与取值
2022-04-21 16:35:20赋值: richTextBox1.Document.Blocks.Clear(); Run run = new Run(innerMessage); Paragraph p = new Paragraph(); ... p.Inlines.Add(run);... richTextBox1.Document.Blocks.Add(p);...TextRange textRange = ne -
为何在wpf中textbox的值有时不会实时的变化
2013-11-03 19:31:17TextBox绑定view model 中的一个属性,如果TextBox的值发生改变,但是焦点没有移出TextBox,此时VM中的属性值是没有发生改变的 其实可以在XAML里这么做 xmlns:i="clr-namespace:System.... -
WPF教程(十七)TextBox
2016-10-17 22:16:02文本框是WPF最基础的文本输入控件,允许终端用户编写文本,可以是一行文字,也可以是多行。 单行文本框 文本框是如此的简单,你都不需要设置任何属性,就可以拥有一个完整的可编辑区。 xmlns=...