OhB*_*ise 1 c# wpf xaml newline carriage-return
我正在创建一个 WPF 屏幕(使用 MVVM 模式),它显示ListView
in中的日志条目TextBlock
,包括异常详细信息。
<GridViewColumn
ListViewBehaviors:LayoutColumn.Width="1*"
ListViewBehaviors:LayoutColumn.MinWidth="123"
ListViewBehaviors:LayoutColumn.IsHidden="{Binding ExceptionDataIsHidden}"
DisplayMemberBinding="{Binding ExceptionData, Mode=OneWay}"
Header="Exception Data"/>
Run Code Online (Sandbox Code Playgroud)
由于记录数据的方式,异常字符串包含大量回车/换行符。例子:
Run Code Online (Sandbox Code Playgroud)System.BigBadException: Stuff blew up -> Some file location at SomeMethodCallAtTheTopLevel: line 1234 at SomeMethodCallAtTheNextLevel: line 123 at SomeMethodCallAtAnotherLevel: line 12 at SomeMethodCallOnBottomLevel: line 1
有些例外情况可能相当大。当我的ListView
. 这些字符并没有在一行上很好地显示每个条目,而是Environment.Newline
强制每一行都是多行,从而导致用户在查看行条目时需要更多的滚动。
我意识到一个简单的解决方案是手动删除换行符,如下所示:
foreach (LogEntry entry in allEntries)
{
entry.ExceptionData = entry.ExceptionData.Replace(Environment.NewLine, "");
}
Run Code Online (Sandbox Code Playgroud)
问题
我希望文本显示在GridViewColumn
单元格中,就好像所有文本Newline
都已被删除一样。但是,我想保留数据中的这些换行符。用户可以右键单击单元格并将其值复制到剪贴板。当粘贴到文件(例如记事本)中时,我希望存在换行符以使格式更易于阅读。
有没有办法忽略 xaml 中的换行符或通过其他方式? 或者我想吃掉我的蛋糕并把它也占有吗?
我现在的解决方案是沿着与 K_Ram 讨论的思路。但是,我不想向我的ViewModel
. 另外,我想要一个也适用于未来项目的通用解决方案。因此,我创建了一个简化的转换器类。
public class RemoveNewLineConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var val = value as string ?? string.Empty;
return val.Replace(Environment.NewLine, string.Empty);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException("Method not implemented");
}
}
Run Code Online (Sandbox Code Playgroud)
那么,xaml 中的用法很简单:
xmlns:Converters="clr-namespace:MyWpfHelpers.Converters;assembly=MyWpfHelpers"
<UserControl.Resources>
<ResourceDictionary>
<Converters:RemoveNewLineConverter x:Key="NoNewline"/>
</ResourceDictionary>
</UserControl.Resources>
<GridViewColumn
ListViewBehaviors:LayoutColumn.Width="1*"
ListViewBehaviors:LayoutColumn.MinWidth="123"
ListViewBehaviors:LayoutColumn.IsHidden="{Binding ExceptionDataIsHidden}"
DisplayMemberBinding="{Binding ExceptionData, Mode=OneWay, Converter={StaticResource NoNewline}}"
Header="Exception Data"/>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2265 次 |
最近记录: |