2010-03-16 15 views
5

Probabilmente mi manca qualcosa di ovvio, ma non riesco a ottenere l'immagine nel mio DataTemplate per allineare a destra nella griglia, in modo che quando la finestra viene allungata, l'immagine viene "tirata" a destra pure:WPF: allineamento orizzontale

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

Qualche suggerimento?

risposta

3

Penso che il problema è che è stata impostata una larghezza massima di 200 per la seconda colonna (dove è contenuta l'immagine). Pertanto, la colonna non sarà più larga di 200 pixel e le due colonne non utilizzeranno lo spazio disponibile completo. Se si inserisce un'altra colonna tra le due colonne e fare di dimensioni star-questo, l'immagine sarà allineato a destra:

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

In questo modo, funziona per me. Tuttavia, dovresti stare attento quando usi StackPanels. Prendono sempre tutto lo spazio di cui hanno bisogno. E se a loro non viene dato così tanto spazio, parte del contenuto sarà semplicemente nascosta.

gehho.

+0

Bello, funziona perfettamente! Grazie. – emptyset

2

Provare a eliminare "MaxWidth" dalla definizione della seconda colonna e impostare la larghezza su "*".

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

Questo fa sì che le impostazioni esplicite non posizionino la seconda colonna a sinistra.

Problemi correlati