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

时间:2015-02-20 16:12:57

标签: xaml spacing viewbox

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

Tim        0.333
Fred       0.357
Fernando   0.300

我希望能够添加到此列表并使文本缩小,以便列表将填充可用空间但不超过它。我还希望能够调整窗口大小并使列表填充可用空间。我尝试使用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>

结果如下:

enter image description here

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>

enter image description here

我一直在围绕这个问题跳舞一段时间。任何人都可以帮我这个吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我能够通过插入空白列来解决问题。这样可以保留对齐和字体大小(最多一点):

<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>

enter image description here

不幸的是,当窗口大小非常高时,它会出现故障:

enter image description here

但是,就我的目的而言,我能够限制总高度,所以这不是问题。