WPF xmal绑定数据,当显示数据过长用省略号代替的方法

有时候会遇到这种情况,用了数据绑定显示的数据太长时,如何让过长的数据显示规定的长度,多余的用省略号代替呢,自己写了个简单的小例子和大家分享一下^_^,我也是学习WPF不久,这是我第一次写博客,有问题还希望大家指出。

先看看最终的效果吧

实现方式自定义一个StringformatConvert类,实现IValueConverter接口,绑定的时候加上转化器就行了。

 1 public class StringformatConvert:IValueConverter
 2     {
 3         public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
 4         {
 5             string s = value.ToString();
 6             int leng;
 7             if (int.TryParse(parameter.ToString(), out leng))
 8             {
 9                 if (s.Length <= leng)
10                     return s;
11                 else
12                     return s.Substring(0, leng) + "...";
13             }
14             else
15                 return string.Empty;
16         }
17 
18         public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
19         {
20             throw new NotImplementedException();
21         }
22     }
View Code

XAML部分的代码,当鼠标经过时显示全部的信息:

 1   <Window.Resources>
 2         <local:StringformatConvert x:Key="stringConvert"/>
 3     </Window.Resources>
 4     <Grid>
 5         <ListBox Height="138" HorizontalAlignment="Left" Margin="132,75,0,0" Name="listBox1" VerticalAlignment="Top" Width="172">
 6             <ListBox.ItemTemplate>
 7                   <DataTemplate DataType="ListBoxItem">
 8                     <TextBlock Text="{Binding Path=Name,Converter={StaticResource stringConvert},ConverterParameter=5}">
 9                         <TextBlock.ToolTip>
10                             <ToolTip>
11                                 <TextBlock Text="{Binding Name}"/>
12                             </ToolTip>
13                         </TextBlock.ToolTip>
14                     </TextBlock>
15                   </DataTemplate>
16             </ListBox.ItemTemplate>
17         </ListBox>
18     </Grid>
View Code

这里的ConverterParameter可以指定显示字符的长度,根据需要自己指定就行了,在StringformatConvert类中就是parameter这个参数。

后台代码:

 public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            List<Student> students = new List<Student>();
            students.Add(new Student { No = "1", Name = "张三", Age = "20" });
            students.Add(new Student { No = "2", Name = "这里显示的是一串很长很长的文字", Age = "21" });
            students.Add(new Student { No = "3", Name = "李四", Age = "21" });
            listBox1.ItemsSource = students;  
        }
       public class Student
        {
            public string No { get; set; }
            public string Name { get; set; }
            public string Age { get; set; }
        } 
    }

我是按照自己的想法把这个功能就实现了,我不知道有没有比这个更简单的方法(是否能够直接用string.Format实现),要是能实现的话希望能够分享一下,谢谢了。  

原文地址:https://www.cnblogs.com/wall-e/p/3270158.html