写在前面

WPF中常常有这样的情况:需要在UI上显示一些信息,比如显示一张图片的信息,信息结构是:

  图片名:Xxx
图片尺寸:Xxx

而其中的 Xxx 通常通过数据绑定来获得, Xxx 前面的内容是需要在xaml中写死的,这个时候如何布局比较方便呢?

可以使用StringFormat来简单实这个需求.


StringFormat的使用

看下面的代码示例:

<Textbox Margin="5" Grid.Row="2" Grid.Column="1"
Text="{BindingPath=UnitCost,StringFormat={}{O:C}}">
</TextBox>

这段代码初步演示了如何使用StringFormat格式字符串.

下面的图中展示了一些常用的字符串格式:




下面展示一下如何使用StringFormat解决开头提到的需求;

假如在TextBlock的Text绑定了后台的一字符串来展示信息,如果希望在该字符串的前后加上一些提示或者后缀什么的,可以像下面这样来写:

<TextBlock Text="Binding Path=Name,StringFormat={}Xxxx{0}Xxxx"/>

上面的代码中Xxxx就是我们可以随意添加的文字内容,前面就会被展示在绑定的内容的前面,后面的就在后面


下面通过一个Demo来说明一下

  • 我使用VS2017建立一个项目:StringFormatDemo

  • 项目目录如下图:

  • 简单的User类的代码:

    User
    namespace StringFormatDemo
    {
    public class User
    {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
    public string Sex { get; set; }
    }
    }
  • AppVM类的代码

    AppVM
    using Microsoft.Practices.Prism.ViewModel;
    namespace StringFormatDemo
    {
    class AppVM:NotificationObject
    {
    public AppVM()
    {
    User = new User
    {
    FirstName = "La",
    LastName = "Laggage",
    Sex = "男",
    Age = 20
    };
    } private User _user;
    public User User
    {
    get => _user;
    set
    {
    if (value == _user) return;
    _user = value;
    RaisePropertyChanged(nameof(User));
    }
    } }
    }
  • 前台xaml

    前台xaml
    <Window x:Class="StringFormatDemo.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:StringFormatDemo"
    mc:Ignorable="d" Foreground="Black" FontSize="16"
    Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
    <local:AppVM/>
    </Window.DataContext>
    <Grid>
    <Border Height="150" Width="240">
    <StackPanel>
    <StackPanel.Resources>
    <Style TargetType="TextBlock">
    <Setter Property="Padding" Value="8"></Setter>
    </Style>
    </StackPanel.Resources>
    <TextBlock Foreground="Black" Text="{Binding Path=User.FirstName,StringFormat={}FirstName: {0}}"/>
    <TextBlock Text="{Binding Path=User.LastName,StringFormat={}LastName: {0}}"/>
    <TextBlock Text="{Binding Path=User.Sex,StringFormat={}Sex: {0},FallbackValue=failed}"/>
    <TextBlock Text="{Binding Path=User.Age,StringFormat={}Age: {0}}"/>
    </StackPanel>
    </Border>
    </Grid>
    </Window>

这个Demo非常非常非常的简单,MainWindow的xaml中实例化AppVM作为DataContext,然后在StackPannel中绑定了AppVM下的User属性,并显示User的FirstName,LastName ... 最终效果如下:



通过StringFormat成功在 FirstName LastName ... 前加上了一些说明;

wpf数据绑定 - StringFormat的妙用的更多相关文章

  1. wpf Content数据绑定StringFormat起作用的原理和解决

    原文:wpf Content数据绑定StringFormat起作用的原理和解决 <Window x:Class="WpfOne.Bind.Bind6" xmlns=" ...

  2. WPF数据绑定Binding(二)

    WPF数据绑定Binding(二) 1.UI控件直接的数据绑定 UI对象间的绑定,也是最基本的形式,通常是将源对象Source的某个属性值绑定 (拷贝) 到目标对象Destination的某个属性上. ...

  3. WPF 数据绑定Binding

    什么是数据绑定? Windows Presentation Foundation (WPF) 数据绑定为应用程序提供了一种简单而一致的方法来显示数据以及与数据交互. 通过数据绑定,您可以对两个不同对象 ...

  4. WPF——数据绑定(一)什么是数据绑定

    注意:本人初学WPF,文中可能有表达或者技术性问题,欢迎指正!谢谢! 一:什么是数据绑定? “Windows Presentation Foundation (WPF) 数据绑定为应用程序提供了一种简 ...

  5. WPF中StringFormat 格式化 的用法

    原文 WPF中StringFormat 格式化 的用法 网格用法 <my:DataGridTextColumn x:Name="PerformedDate" Header=& ...

  6. 剖析WPF数据绑定机制

    引言 WPF框架采取的是MVVM模式,也就是数据驱动UI,UI控件(Controls)被严格地限制在表示层内,不会参与业务逻辑的处理,只是通过数据绑定(Data Binding)简单忠实地表达与之绑定 ...

  7. WPF 10天修炼 第十天- WPF数据绑定

    WPF数据绑定 数据绑定到元素属性是将源对象指定为一个WPF元素,并且源属性是一个依赖属性,依赖属性内置了变更通知.当改变源对象依赖属性值之后,绑定目标可以立即得到更新,开发人员不需要手动编写响应事件 ...

  8. WPF中StringFormat的用法

    原文:WPF中StringFormat的用法 WPF中StringFormat的用法可以参照C#中string.Format的用法 1. C#中用法: 格式化货币(跟系统的环境有关,中文系统默认格式化 ...

  9. WPF中StringFormat的用法--显示特定位数的数字

    原文:WPF中StringFormat的用法--显示特定位数的数字 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/huangli321456/art ...

随机推荐

  1. 使用css实现特殊标志或图形

    1. 前言 由于图片占的空间比较大,且图片越多,越不好管理,所以有些时候,我们可以使用一些简单的标签样式来实现简单的图形标志来替代图片. 2. 实例展示: 三角形示例 示例代码: <style ...

  2. python之用户登陆作业

    实现一个用户登陆的小程序,如果密码错误,可以重试三次,如果三次均错误,则锁定 数据库如下格式,分别用户名|密码|锁定,其中锁定字段0为正常,1为被锁定 root|admin123|0 admin|ad ...

  3. MySQL基本操作之命令行操作

    MySQL基础操作 MySQL基础操作--命令行操作

  4. OJ_单词倒排

    题目描述:对字符串中的所有单词进行倒排. 说明: 1.每个单词是以26个大写或小写英文字母构成,可以用一个“-”中连接线连接单词两部分表示一个单词,但是仅限一个“-”,出现两个“--”则为非构成单词的 ...

  5. MVC仓储执行存储过程报错“未提供该参数”

    今天做的时候出现错误: "过程或函数 'sp_ProcName' 需要参数 '@uid',但未提供该参数. 可是我参数都传了,然后调试也是一样,然后对照参数列表, 后来发现执行的时候还要加入 ...

  6. array_column()提取二维数组中某个值

    <?php $multipleCommodity = array( =>array(), =>array() ); $arr1=array_column($multipleCommo ...

  7. Executor(一)ExecutorService 线程池

    Executor(一)ExecutorService 线程池 本篇主要涉及到的是 java.util.concurrent 包中的 ExecutorService.ExecutorService 就是 ...

  8. 泛型约束where条件的使用(通过类型参数动态反射创建实例)

    定义抽象的人类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  9. UVa 10970 Big Chocolate (想一下就AC了)

    题意:给你一个m*n的巧克力,让人把它切成1*1的,但是每次只能切一下,问要切多少刀. 析:简单啊,我就不明白了 怎么那么多人TLE了,不会当DP做了吧,其实不用的. 假设有一个1*m的巧克力,很明显 ...

  10. (KMP 水)Wow! Such Doge! -- hdu -- 4847

    http://acm.hdu.edu.cn/showproblem.php?pid=4847 Wow! Such Doge! Time Limit:1000MS     Memory Limit:32 ...