WPF文字的处理是一个比较基础的技能。在使用WPF开发工具时,对于各种文字的处理时经常会遇到的情况。希望大家可以通过实践经验的积累,牢固掌握这一方面知识。

AD:WOT2014:用户标签系统与用户数据化运营培训专场

WPF文字在处理的过程中可以实现许多种方式来满足我们开发人员在实际编程中的需求。在这里将会为大家呈现一种WPF文字作为标题时的竖排方式。

有时Expande 控件的标题文字需要竖排,例如 Expande的FlowDirection属性为"RightToLeft",即左右方向的收。

WPF文字的处理相关代码示例:

  1. < Grid x:Name="gridTemplate">
  2. < Grid.Resources>
  3. < !--模板数据的Expender标题竖排-->
  4. < DataTemplate x:Key=
    "ExpanderHeaderTextV">
  5. < TextBlock Text="{Binding}"
  6. Width="30"
  7. Foreground="Green"
  8. FontSize="20"
  9. FontWeight="Normal"
  10. TextWrapping="Wrap">
  11. < TextBlock.RenderTransform>
  12. < TransformGroup>
  13. < MatrixTransform/>
  14. < /TransformGroup>
  15. < /TextBlock.RenderTransform>
  16. < Run Text="模"/>
  17. < LineBreak/>
  18. < Run Text="版"/>
  19. < LineBreak/>
  20. < Run Text="内"/>
  21. < LineBreak/>
  22. < Run Text="容"/>
  23. < LineBreak/>
  24. < /TextBlock>
  25. < /DataTemplate>
  26. < /Grid.Resources>
  27. < Expander HorizontalAlignment=
    "Stretch" Header="" HeaderTemplate=
    "{StaticResource ExpanderHeaderTextV}
    " ExpandDirection="Left"
    FlowDirection="RightToLeft"
    VerticalAlignment="Stretch"
    AllowDrop="False">
  28. < TabControl IsSynchronizedWith
    CurrentItem="True" Margin=
    "0,0,0,0" FontSize="14">
  29. < TabItem Header="模板数据"
    x:Name="tabTemplate">
  30. < Grid/>
  31. < /TabItem>
  32. < /TabControl>
  33. < /Expander>
  34. < /Grid>

WPF文字的基本处理方法就为大家介绍到这里。

 

--------------------------------------------------------------------------------------------------------------------------------------

 

Silverlight提供的TextBlock 用于基本的文本显示. 通常状态下,TextBlock文本都是横排状态.但是,有的时候,我们需要文本竖排以满足我们的需求. 下面介绍一下两种方法:

方法一: 使用TextWrapping = Wrap

TextBlock的TextWrapping属性用于获取或设置TextBlock对文本的换行方式,它有两个枚举值:NoWrap和Wrap.Wrap表示允许TextBlock当文本的长度超过TextBlock的ActualWith时,文本自动换行.这个属性给我们一点启示:我们可以设置TextWrapping = Wrap,并设定TextBlock的With来实现我们的效果.

例如:

<TextBlock TextAlignment="Center" TextWrapping="Wrap" Text="好友列表" Width="12" Foreground="Red"/>

效果:

但是,这个方法有一个缺点,就是你需要设置好TextBlock.的with属性和文本字体大小的比例. 例如,我们将依旧设置成width = 12, FontSize =20,即:

<TextBlock TextAlignment="Center" TextWrapping="Wrap" Text="好友列表" Width="12" Foreground="Red" FontSize="20" />

得到的效果:

很明显文字有被遮挡,因此,如果再给字体添加一个粗体的属性,那遮挡效果更明显.于是,寻求另一中方法.

方法二:自定义一个继承与Control的类,命名为VerticalTextBlock.

该类公布一个TextProperty属性,并自定义控件模板,在模板中添加一个TextBlock,TextBlock的Text内容由一系列带有换行符的字符组成.该类也重写模板应用方法.代码如下:

public class VerticalTextBlock:Control
    {
public VerticalTextBlock()
        {
            IsTabStop = false;
            var templateXaml =
@"<ControlTemplate " +
#if SILVERLIGHT
"xmlns='http://schemas.microsoft.com/client/2007' " +
#else
"xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' " +
#endif
"xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>" +
"<Grid Background=\"{TemplateBinding Background}\">" +
"<TextBlock x:Name=\"TextBlock\" TextAlignment=\"Center\"/>" +
"</Grid>" +
"</ControlTemplate>";
#if SILVERLIGHT
            Template = (ControlTemplate)XamlReader.Load(templateXaml);
#else
using(var stream = new MemoryStream(Encoding.UTF8.GetBytes(templateXaml)))
            {
                Template = (ControlTemplate)XamlReader.Load(stream);
            }
#endif
        }
public override void OnApplyTemplate()
        {
base.OnApplyTemplate();
            _textBlock = GetTemplateChild("TextBlock") as TextBlock;
            CreateVerticalText(_text);
        }
private string _text { get; set; }
private TextBlock _textBlock { get; set; }
public string Text
        {
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
        }
public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
"Text", typeof(string), typeof(VerticalTextBlock), new PropertyMetadata(OnTextChanged));
private static void OnTextChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
        {
            ((VerticalTextBlock)o).OnTextChanged((string)(e.NewValue));
        }
private void OnTextChanged(string newValue)
        {
            CreateVerticalText(newValue);
        }
private void CreateVerticalText(string text)
        {
            _text = text;
if (null != _textBlock)
            {
bool first = true;
foreach (var c in _text)
                {
if (!first)
                    {
                        _textBlock.Inlines.Add(new LineBreak());
                    }
                    _textBlock.Inlines.Add(new Run { Text = c.ToString() });
                    first = false;
                }
            }
        }
    }

如何应用?

很简单,添加控件所在的命名空间,然后再xaml里像添加控件一样加载即可.

<mcl:VerticalTextBlock Text="功能列表" FontWeight="bold" Foreground="Red" FontSize="20"/>

效果:

第二种方法比较好,就像正常使用TextBlock控件一样使用,不需要考虑到字体大小和控件大小间的关系.

WPF文字排列方式解析zz的更多相关文章

  1. Android 4.2原生支持从右到左的文字排列格式

    Android 4.1(Jelly Bean)  在TextView和EditText 元素里对“双向文字顺序”提供了有限的功能支持,允许应用程序在编辑和显示字符的时候,能够同时支持从左到右(LTR) ...

  2. OLED屏幕那些次像素有趣的排列方式

    http://www.dzsc.com/data/2016-6-2/109856.html 我们今天的重点内容为倒数第二列内容的上半部分,也就是RGB排列和Pentile排列.在介绍OLED屏幕时候我 ...

  3. WPS Office for Mac如何修改Word文档文字排列?WPS office修改Word文档文字排列方向教程

    Word文档如何改变文字的排列方向?最新版WPS Office for Mac修复了文字排版相关的细节问题,可以更快捷的进行Word编辑,WPS Office在苹果电脑中如何修改Word文档文字排列方 ...

  4. OpenGL 像素在内存中的排列方式

    在OpenGL中所有和图像像素有关的API(包括glTexImage2D, glReadPixels等)第一个像素从左下角开始,从左到又一次排列,满了从下到上排列. 这个和Windows 下惯用的左上 ...

  5. Android网络之数据解析----SAX方式解析XML数据

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  6. 用JAXP的dom方式解析XML文件

    用JAXP的dom方式解析XML文件,实现增删改查操作 dom方式解析XML原理 XML文件 <?xml version="1.0" encoding="UTF-8 ...

  7. Dom方式解析XML

    public class TestXML { public static void main(String[] args) throws SAXException, IOException { //D ...

  8. Linux下的Source命令及脚本的执行方式解析

    Linux Source命令及脚本的执行方式解析 http://blog.csdn.net/wangyangkobe/article/details/6595143 当我修改了/etc/profile ...

  9. css考核点整理(九)-有几种文字替换方式,之间的优缺点

    有几种文字替换方式,之间的优缺点

随机推荐

  1. iOS开发系列--Objective-C 之 KVC、KVO

    概述 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听( ...

  2. .net 获取https页面的信息 在iis7.5服务器上不管用

    让我纠结了一天多的问题,给大家看下,有相同情况的可以不用浪费时间了,本人当时找了好半天都没找到什么有用的信息,项目在本地没有问题,但部署在服务器后,获取不到https页面的信息,加入下面的代码就可以了 ...

  3. 1.1-java创建包和类的方法

    1.new-package-命名方法com打头.中间名称.后台要创建的class 2.创建class-    new-class 选择一下主方法 代码示例  编译完保存一下就能输出信息,一直没有保存才 ...

  4. 二、JavaScript语言--JS基础--JavaScript进阶篇--JavaScript内置对象

    1.什么事对象 JavaScript 中的所有事物都是对象,如:字符串.数值.数组.函数等,每个对象带有属性和方法. 对象的属性:反映该对象某些特定的性质的,如:字符串的长度.图像的长宽等: 对象的方 ...

  5. Quartus 11.0 的AS 下载方式和JTAG下载jic文件的方式

    FPGA下载的三种方式:主动配置方式(AS)和被动配置方式(PS)和最常用的(JTAG)配置方式: AS由FPGA器件引导配置操作过程,它控制着外部存储器和初始化过程,EPCS系列.如EPCS1,EP ...

  6. Win10开机提示Resume from Hibernation该怎么办?

    Windows10系统的电脑开机提示:Resume from Hibernation(从休眠恢复),这是电脑没有真正关机,而是上次关机时进入了[休眠状态],所以开机时提示:从休眠恢复.如何解决Wind ...

  7. 理解JavaScript中的事件处理

    什么是事件? 事件(Event)是JavaScript应用跳动的心脏 ,也是把所有东西粘在一起的胶水.当我们与浏览器中 Web 页面进行某些类型的交互时,事件就发生了.事件可能是用户在某些内容上的点击 ...

  8. [Tips] JavaScript 使用hash 对象传参

    转自Web 前端开发修炼之道. 在JavaScript 中funciton 包含多个参数的时候,我们想要实现可选参数的功能,传很多个null 其实是个很讨厌的事情,这个时候就可以使用这个技巧. 具体见 ...

  9. Oracle 数据泵文件

    数据泵文件 expdp介绍 EXPDP命令行选项1. ATTACH该选项用于在客户会话与已存在导出作用之间建立关联.语法如下ATTACH=[schema_name.]job_nameSchema_na ...

  10. ThinkPHP中getField( )和field( )

    做数据库查询的时候,比较经常用到这两个,总是查手册,记不住,现在把它总结下,希望以后用的时候不查手册了. 不管是用select 查询数据集,还是用find 查询数据,常配合连贯操作where.fiel ...