如何在 Viewbox 中保持对齐和间距

How to maintain alignment and spacing in Viewbox

我有一个标签和值列表。例如(此样本用于说明目的):

Tim        0.333
Fred       0.357
Fernando   0.300

我希望能够添加到此列表并缩小文本,以便列表将填充可用的 space 但不超过它。我还希望能够调整 window 的大小并让列表填充可用的 space。我尝试使用 Viewbox 来完成此操作,但以两种不同的方式失败了:

1) 我尝试使用网格并用 Viewbox 包围每个标签和值。这保持了标签和值之间的间距,但标签和值的大小不同。这是显示播放器信息的用户控件的代码:

<UserControl x:Class="Viewbox.Player"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Viewbox Grid.Column="0">
            <TextBlock FontSize="30" Margin="5" Text="{Binding Name}" HorizontalAlignment="Left"/>
        </Viewbox>
        <Viewbox Grid.Column="1" HorizontalAlignment="Right">
            <TextBlock FontSize="30" Margin="5" Text="{Binding Average, StringFormat={}{0:0.000}}" HorizontalAlignment="Right"/>
        </Viewbox>
    </Grid>
</UserControl>

结果如下:

2) 我尝试用 Viewbox 包围网格。这根据我的需要调整了文本的大小,但现在我的间距消失了,每行都居中了。

<UserControl x:Class="Viewbox.Player"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Viewbox>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="0" FontSize="30" Margin="5" Text="{Binding Name}" HorizontalAlignment="Left"/>
            <TextBlock Grid.Column="1" FontSize="30" Margin="5" Text="{Binding Average, StringFormat={}{0:0.000}}" HorizontalAlignment="Right"/>
        </Grid>
    </Viewbox>
</UserControl>

我已经为这个问题纠结了一段时间。谁能帮我解决这个问题?

谢谢!

我可以通过插入一个空白列来解决问题。这会保留对齐方式和字体大小(在一定程度上):

<UserControl x:Class="Viewbox.Player"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Viewbox Grid.Column="0">
            <TextBlock Margin="5" Text="{Binding Name}" HorizontalAlignment="Left"/>
        </Viewbox>
        <Viewbox Grid.Column="2">
            <TextBlock Margin="5" Text="{Binding Average, StringFormat={}{0:0.000}}" HorizontalAlignment="Right"/>
        </Viewbox>
    </Grid>
</UserControl>

不幸的是,当 window 的尺寸非常高时它有点崩溃:

但是,为了我的目的,我可以限制总高度,所以这不是问题。