WPF: 水平对齐方式

5

也许我只是错过了一些显而易见的东西,但我无法使我的DataTemplate中的图像与Grid右对齐,以便当窗口被拉伸时,图像也会被“拉”到右边:

<Window.Resources>
    <DataTemplate x:Key="PersonTemplate" DataType="Minimal.Client.Person">
        <Border BorderBrush="Purple" BorderThickness="2" CornerRadius="2" Padding="5" Margin="5">
            <Grid Margin="10">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" MinWidth="200"/>
                    <ColumnDefinition Width="Auto" MaxWidth="200"/>
                </Grid.ColumnDefinitions>
                <StackPanel Grid.Column ="0" Orientation="Horizontal" >
                    <TextBlock FontFamily="Verdana" FontSize="16" FontWeight="Bold" Text="{Binding LastName}" />
                    <TextBlock FontFamily="Verdana" FontSize="16" Text=", " />
                    <TextBlock FontFamily="Verdana" FontSize="16" Text="{Binding FirstName}" />
                </StackPanel>
                <StackPanel Grid.Column="1" Orientation="Vertical" HorizontalAlignment="Right">
                    <Border BorderBrush="Black" BorderThickness="1">
                        <Image Source="{Binding Picture}" Width="180" Height="150" />
                    </Border>
                </StackPanel>
            </Grid>
        </Border>
    </DataTemplate>
</Window.Resources>

有什么建议吗?
2个回答

3

我认为问题在于你设置了第二列(包含图像的列)的最大宽度为200。因此,该列的宽度不会超过200个像素,两个列也不会使用完整的可用空间。如果在这两个列之间插入另一列并将其设置为星号大小,图像将右对齐:

<Grid Margin="10">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" MinWidth="200"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="Auto" MaxWidth="200"/>
    </Grid.ColumnDefinitions>
    <StackPanel Grid.Column ="0" Orientation="Horizontal" >
        <TextBlock FontFamily="Verdana" FontSize="16" FontWeight="Bold" Text="{Binding LastName}" />
        <TextBlock FontFamily="Verdana" FontSize="16" Text=", " />
        <TextBlock FontFamily="Verdana" FontSize="16" Text="{Binding FirstName}" />
    </StackPanel>
    <StackPanel Grid.Column="2" Orientation="Vertical" HorizontalAlignment="Right">
        <Border BorderBrush="Black" BorderThickness="1">
            <Image Source="{Binding Picture}" Width="180" Height="150" />
        </Border>
    </StackPanel>
</Grid>

这种方式对我有用。然而,当使用StackPanels时要小心。它们总是占据所需的空间。如果它们没有被给予足够的空间,部分内容将被隐藏。

gehho。


2
尝试从第二列定义中去除“MaxWidth”,并将宽度设置为“*”。
<Grid.ColumnDefinitions>
  <ColumnDefinition Width="Auto" MinWidth="200"/>
  <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>

这将防止显式设置将您的第二列定位到左侧。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接