如何将 WPFDataGridTextColumn
文本限制为 10 个字符的最大长度。
我不想使用DatagridTemplateColumn
,因为它有内存泄漏问题。
该字段还绑定到数据实体模型。
如何将 WPFDataGridTextColumn
文本限制为 10 个字符的最大长度。
我不想使用DatagridTemplateColumn
,因为它有内存泄漏问题。
该字段还绑定到数据实体模型。
如果您不想使用,DatagridTemplateColumn
则可以在此处更改DataGridTextColumn.EditingElementStyle
并设置TextBox.MaxLength
:
<DataGridTextColumn Binding="{Binding Path=SellingPrice, UpdateSourceTrigger=PropertyChanged}">
<DataGridTextColumn.EditingElementStyle>
<Style TargetType="{x:Type TextBox}">
<Setter Property="MaxLength" Value="10"/>
</Style>
</DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
我知道我有点挖坟,但我想出了另一个我在其他地方找不到的解决方案。它涉及使用价值转换器。有点hacky,是的,但它的优点是它不会用很多行污染xaml,如果你想将它应用于许多列,这可能很有用。
以下转换器完成了这项工作。只需App.xaml
在Application.Resources
:下添加以下引用<con:StringLengthLimiter x:Key="StringLengthLimiter"/>
,其中con
转换器的路径是App.xaml
.
public class StringLengthLimiter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if(value!=null)
{
return value.ToString();
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int strLimit = 3;
try
{
string strVal = value.ToString();
if(strVal.Length > strLimit)
{
return strVal.Substring(0, strLimit);
}
else
{
return strVal;
}
}
catch
{
return "";
}
}
}
然后只需在 xaml 绑定中引用转换器,如下所示:
<DataGridTextColumn Binding="{Binding Path=SellingPrice,
UpdateSourceTrigger=PropertyChanged,
Converter={StaticResource StringLengthLimiter}}">