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

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

先看看最终的效果吧

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

实现方式自定义一个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实现),要是能实现的话希望能够分享一下,谢谢了。  

 

你可能感兴趣的:(WPF)