WPF TextBox/TextBlock 文本超出显示时,文本靠右显示

摘要:
FlowDirection.RightToLeft:FlowDirection.LeftToRight;20}21}2223publicstaticvoidSetScrollEndWhenTextTrimmed24{25element.SetValue;26}2728publicstaticboolGetScrollEndWhenTextTrimmed29{30returnelement.GetValue;31}在需要设置文本超出时居右显示的TextBox控件中,添加附加属性ScrollEndWhenTextTrimmed即可。如方案FlowDirection,可以在添加附加属性更改事件中,订阅TextBox的TextChanged。1textBox.SelectionStart=textBox.Text.Length;2textBox.ScrollToEnd();But,此方案有缺陷。当TextBox设置IsEnabled=false时,就无法滚动到了。即使如下设置依然无效:1textBox.IsEnabled=true;2textBox.SelectionStart=textBox.Text.Length;3textBox.ScrollToEnd();4textBox.IsEnabled=false;当然,如果文本框不设置IsEnabled时,此方案是可行的。然而SelectionStart不是依赖属性,只能直接赋值~

文本框显示

文本框正常显示:

WPF TextBox/TextBlock 文本超出显示时,文本靠右显示第1张

文本框超出区域显示:

WPF TextBox/TextBlock 文本超出显示时,文本靠右显示第2张

实现方案

判断文本框是否超出区域

请见《TextBlock IsTextTrimmed 判断文本是否超出

设置文本布局显示

1. FlowDirection

当文本超出显示区域时,设置FlowDirection靠右显示

下面是封装的附加属性ScrollEndWhenTextTrimmed

1         /// <summary>
2         ///当文本超出显示时,文本是否靠右侧显示
3         /// </summary>
4         public static readonly DependencyProperty ScrollEndWhenTextTrimmedProperty =DependencyProperty.RegisterAttached(
5         "ScrollEndWhenTextTrimmed", typeof(bool), typeof(TextBoxHelper),
6         new PropertyMetadata(default(bool), OnScrollEndWhenTextTrimmedChanged));
7 
8         private static voidOnScrollEndWhenTextTrimmedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
9 {
10             var textBox =(TextBox)d;
11             textBox.TextChanged -=TextBoxOnTextChanged;
12             if ((bool)e.NewValue)
13 {
14                 textBox.FlowDirection = IsTextTrimmed(textBox) ?FlowDirection.RightToLeft : FlowDirection.LeftToRight;
15                 textBox.TextChanged +=TextBoxOnTextChanged;
16 }
17             void TextBoxOnTextChanged(objectsender, TextChangedEventArgs args)
18 {
19                 textBox.FlowDirection = IsTextTrimmed(textBox) ?FlowDirection.RightToLeft : FlowDirection.LeftToRight;
20 }
21 }
22 
23         public static void SetScrollEndWhenTextTrimmed(DependencyObject element, boolvalue)
24 {
25 element.SetValue(ScrollEndWhenTextTrimmedProperty, value);
26 }
27 
28         public static boolGetScrollEndWhenTextTrimmed(DependencyObject element)
29 {
30             return (bool)element.GetValue(ScrollEndWhenTextTrimmedProperty);
31         }

在需要设置文本超出时居右显示的TextBox控件中,添加附加属性ScrollEndWhenTextTrimmed即可。

2.ScrollToEnd

类似方案FlowDirection,文本超出时,通过滚动到文本末尾后,文本靠右显示。

如方案FlowDirection,可以在添加附加属性更改事件中,订阅TextBox的TextChanged。

1     textBox.SelectionStart =textBox.Text.Length;
2     textBox.ScrollToEnd();

But,此方案有缺陷。当TextBox设置IsEnabled=false时,就无法滚动到了。即使如下设置依然无效:

1     textBox.IsEnabled = true;
2     textBox.SelectionStart =textBox.Text.Length;
3 textBox.ScrollToEnd();
4     textBox.IsEnabled = false;

当然,如果文本框不设置IsEnabled时,此方案是可行的。

注:如上方案,本来通过SelectionStart直接绑定TextBox自身的Text.Length就行。然而SelectionStart不是依赖属性,只能直接赋值~

WPF TextBox/TextBlock 文本超出显示时,文本靠右显示第3张

免责声明:文章转载自《WPF TextBox/TextBlock 文本超出显示时,文本靠右显示》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python使用stomp连接activemqgit patch合并下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WPF Geometry几何图形数据图标

相信大家在阅读WPF相关GitHub开源项目源码时都会看见一串串这种数据这种Geometry数据就是几何图形数据 为什么要用Geometry数据做图标? 有一种做法是使用ttf字体文件代替,不过使用ttf字体文件会出现下面几个缺点:1、团队协作不便于管理2、需要依赖特定平台3、无法灵活使用而使用Geometry的话,我们可以将这些几何图形数据存入资源字典R...

WPF实现消息提醒(广告弹窗)

1.先上效果图: 2.1t提示框界面。 主窗口界面没什么内容,就放了一个触发按钮。先绘制通知窗口(一个关闭按钮,俩个文本控件),可以设置下ResizeMode="NoResize" WindowStyle="None"   Topmost="True", 去掉窗口标题,并使提示窗口始终处于最上层。 <Border BorderThickness="...

【WPF】附加属性

一直都对附加属性理解很模糊,今天看了一篇文章,恍然大悟,用个Demo掩饰一下对附加属性的理解 附加属性,简单的理解就是给一个对象外在的定义一个属性,使得该对象拥有和使用该属性,最典型的是Grid.Row和Canvas.Top的应用 1、定义一个空间Rectangle,并且使之旋转30度 <Rectangle Fill="Red" Wi...

《深入浅出WPF》学习笔记二数据绑定(Binding)、依赖属性和附加属性

第六章 深入浅出话Binding    1、绑定的源可以是任意对象,并通过属性公开自己的数据;         绑定的目标必须是依赖对象的依赖属性。    2、INotifyPropertyChanged接口,当对象实现了这个接口的时候,当数据源改变的时候可以通知UI同时实现改变,         实现原理:当为Binding设置了数据源后,Bindin...

MVVM(使用Prism框架)开发WPF

【MVVM】目的是为了分离视图(View)和模型(Model)的耦合——解耦 1、View负责前端展示,与ViewModel进行数据和命令的交互。(双向的数据属性传递,单向的命令属性传递View→ViewModel) 2、ViewModel,负责前端视图业务级别的逻辑结构组织,并将其反馈给前端。 3、Model,主要负责数据实体的结构处理,与ViewMod...

Axure 入门

Axure RP是一个专业的快速原型设计工具。Axure(发音:Ack-sure),代表美国Axure公司;RP则是Rapid Prototyping(快速原型)的缩写。 Axure RP是美国Axure Software Solution公司旗舰产品,是一个专业的快速原型设计工具,让负责定义需求和规格、设计功能和界面的专家能够快速创建应用软件或Web网站...