2010-03-16 194 views
5

也许我只是错过了一些显而易见的东西,但我无法让我的DataTemplate中的图像对齐到网格中的右侧,这样当窗口拉伸时,图像被“拉出”向右:WPF:水平对齐

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

有什么建议吗?

回答

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> 

这样一来,它为我工作。但是,使用StackPanel时应该小心。他们总是需要尽可能多的空间。如果他们没有得到太多的空间,部分内容将被隐藏起来。

gehho。

+0

不错,完美的作品!谢谢。 – emptyset 2010-03-16 16:47:32

2

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

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

这样可以将您的第二列定位到左边。