有时候会遇到这种情况,用了数据绑定显示的数据太长时,如何让过长的数据显示规定的长度,多余的用省略号代替呢,自己写了个简单的小例子和大家分享一下^_^,我也是学习WPF不久,这是我第一次写博客,有问题还希望大家指出。
先看看最终的效果吧
实现方式自定义一个StringformatConvert类,实现IValueConverter接口,绑定的时候加上转化器就行了。
class="code_img_closed" src="/Upload/Images/2013082016/0015B68B3C38AA5B.gif" alt="" />logs_code_hide('df0471ff-06b9-4773-98cc-edde1a7c5b2e',event)" src="/Upload/Images/2013082016/2B1B950FA3DF188F.gif" alt="" />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实现),要是能实现的话希望能够分享一下,谢谢了。