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

时间:2023-03-09 17:05:05
WPF xmal绑定数据,当显示数据过长用省略号代替的方法

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

先看看最终的效果吧

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

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

 public class StringformatConvert:IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string s = value.ToString();
int leng;
if (int.TryParse(parameter.ToString(), out leng))
{
if (s.Length <= leng)
return s;
else
return s.Substring(, leng) + "...";
}
else
return string.Empty;
} public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}

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

   <Window.Resources>
<local:StringformatConvert x:Key="stringConvert"/>
</Window.Resources>
<Grid>
<ListBox Height="138" HorizontalAlignment="Left" Margin="132,75,0,0" Name="listBox1" VerticalAlignment="Top" Width="172">
<ListBox.ItemTemplate>
<DataTemplate DataType="ListBoxItem">
<TextBlock Text="{Binding Path=Name,Converter={StaticResource stringConvert},ConverterParameter=5}">
<TextBlock.ToolTip>
<ToolTip>
<TextBlock Text="{Binding Name}"/>
</ToolTip>
</TextBlock.ToolTip>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>

这里的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实现),要是能实现的话希望能够分享一下,谢谢了。