代码之家  ›  专栏  ›  技术社区  ›  emptyset

WPF:水平对齐

wpf
  •  5
  • emptyset  · 技术社区  · 16 年前

    可能我只是遗漏了一些明显的东西,但我无法让DataTemplate中的图像在网格中向右对齐,因此当窗口被拉伸时,图像也会“拉”到右侧:

    <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 回复  |  直到 16 年前
        1
  •  3
  •   gehho    16 年前

    我认为问题是您为第二列(包含图像的位置)设置了MaxWidth为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时应该小心。它们总是占据所需的空间。如果没有足够的空间,部分内容就会被隐藏起来。

        2
  •  2
  •   Guy Starbuck    16 年前

    尝试从第二列定义中取出“MaxWidth”,并将宽度设置为“*”。

    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="Auto" MinWidth="200"/>
      <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>