【发布时间】:2018-01-24 13:39:32
【问题描述】:
以下 ListView 应通过减小 FontSize 来调整其项目的大小,这些项目使用 TextBlock DataTemplate 呈现。初始 FontSize 在 Style 中指定,应为最大值 (23pt)。
如果项目文本过长,则最多将其换行为 2 行。
当窗口调整其高度或控件空间变得小于显示项目所需的空间时,FontSize 应减小,直到可以显示所有项目。如果可能,以前包装的文本应“展开”
<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 位于 row = 0 , column = 0 的网格内:
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="250" />
<ColumnDefinition Width="300" />
</Grid.ColumnDefinitions>
GridCell 0,0 只能调整高度。 ListView 应采用整个 Cellsize 并调整其子项的 FontSize 以适应(最大 FontSize 可用)。 将文本换行到最多 2 个文本行也很重要。
【问题讨论】:
-
我用一些完整的代码更新了我的答案。