以下ListView应通过减小FontSize来调整其使用TextBlockDataTemplate呈现的项的大小。初始FontSize在Style中指定,应该是最大值(23 pt)。
如果项目文本太长,则最多换行2行。
当窗口调整其高度或控件空间小于显示项目所需时,字体大小应减小,直到可以显示所有项目。如果可能,应将以前 Package 的文本“解 Package ”
<ListView x:Name="myListView" Grid.Row="0" Grid.Column="0"
Background="White" BorderBrush="Black" BorderThickness="1"
IsHitTestVisible="False"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Disabled">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock MaxHeight="80"
Margin="0,0,0,21"
Text="{Binding}"
TextTrimming="CharacterEllipsis"
TextWrapping="Wrap">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="FontSize" Value="23pt" />
<Setter Property="TextTrimming" Value="CharacterEllipsis" />
<Setter Property="FontFamily" Value="Arial Regular" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="HorizontalAlignment" Value="Left" />
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemContainerStyle>
...
</ListView.ItemContainerStyle>
</ListView>
Example Picture showing what I want
我已经尝试通过在ListView周围使用ViewBox来实现这一要求,但这将调整高度和宽度(比率)==>但文本的可用宽度应是恒定的。
另一种方法是覆盖ListView的MeasureOverride以减小FontSize,如果listView的期望大小>控件的可用大小。但这也不管用。
也许有个聪明人能帮我解决这个问题。
最好的问候,
编辑17.08.2017
我错过了一些必要的信息。ListView位于行= 0,列= 0的网格内:
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="250" />
<ColumnDefinition Width="300" />
</Grid.ColumnDefinitions>
GridCell 0,0只能调整height的大小。ListView应采用整个Cellsize并调整其子级的FontSize以适应(最大FontSize可用于此)。换行文本最多2行也很重要。
1条答案
按热度按时间8xiog9wr1#
您可能需要做一些事情,比如将
FontSize
绑定到ListView
的宽度,然后使用自定义的IValueConverter
将该宽度更改为FontSize
,这样文本就可以容纳在一行中。不幸的是,没有内置的功能来做你想做的事情。
我现在有个可行的解决方案!我不得不用了一些技巧来让它工作。转换器需要能够看到有关
ListView
的更多信息,而不是通常能够看到的信息。为了解决这个问题,我使用IMultiValueConverter
将整个ListView
元素发送给它。它从MaxFontSize
开始,向下下降一个字体大小,直到找到最长行完全适合LitView
宽度的大小,或者它达到MinFontSize
。你可能需要做一些调整,以完美地满足你的需求,但这应该照顾到最困难的部分。您可能需要考虑优化大小代码,因为它可能会对许多项目产生性能问题。应该有几个相当明显的优化,我现在没有时间去做。
添加以下类:
使用此XAML: