我想在WPF中使用非常简单的东西,但我不能让它工作:
我有一个包含2列的网格:一个*和一个Auto。第二列包含TextBlock。我需要texttrimming来处理这个TextBlock。这当前不起作用,因为TextBlock超出了网格的范围。
额外信息:
重现问题的代码(例如在Kaxaml中):
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DockPanel>
<Grid Height="20" Background="Blue" DockPanel.Dock="Top" Margin="100 0 100 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto" MaxWidth="200"/>
</Grid.ColumnDefinitions>
<TextBlock
Grid.Column="1"
Background="Red"
Text="Test tralalalalalalalalalala long string this should be trimmed!"
TextTrimming="CharacterEllipsis"/>
</Grid>
</DockPanel>
</Page>
有什么建议吗?
答案 0 :(得分:1)
第二种解决方案: 使用这样的转换器:
namespace StackStuff{
class WidthConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if(value is Double)
{
return (double)value - 200; // 200 = 100+100 form the grid margin
}
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
在视图中,您将拥有:
xmlns:local="clr-namespace:StackStuff"
然后,您必须添加转换器才能使用它:
<Window.Resources>
<local:WidthConverter x:Key="WidthConverter"/>
</Window.Resources>
然后你必须实现转换器:
<DockPanel Background="Green" x:Name="dock">
<Grid Height="20" Background="Blue" DockPanel.Dock="Top" Margin="100 0 100 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock MaxWidth="{Binding ActualWidth, Converter={StaticResource WidthConverter}, ElementName=dock}"
Grid.Column="1"
希望这是你想要的。