2010-03-16 11 views
5

Probablemente me falta algo obvio, pero no puedo hacer que la imagen en mi DataTemplate se alinee a la derecha en la rejilla, de modo que cuando se estira la ventana, la imagen se "tira" a la derecha también:WPF: Alineación horizontal

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

¿Alguna sugerencia?

Respuesta

3

Creo que el problema es que ha establecido un MaxWidth de 200 para la segunda columna (donde figura la imagen). Por lo tanto, la columna no tendrá más de 200 píxeles y las dos columnas no usarán el espacio completo disponible. Si inserta otra columna de entre las dos columnas y hacer de ésta una estrella de tamaño, la imagen estará alineado a la derecha:

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

De esta manera, funciona para mí. Sin embargo, debe tener cuidado al usar StackPanels. Siempre toman todo el espacio que necesitan. Y si no se les da tanto espacio, parte del contenido simplemente se ocultará.

gehho.

+0

¡Agradable, funciona a la perfección! Gracias. – emptyset

2

Intente sacar el "MaxWidth" de la definición de su segunda columna, y establezca el ancho en "*".

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

Esto mantiene la configuración explícita de colocar la segunda columna a la izquierda.

Cuestiones relacionadas