WPF: горизонтальное выравнивание - PullRequest
5 голосов
/ 16 марта 2010

Возможно, я просто упускаю что-то очевидное, но я не могу заставить изображение в моем 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 голосов
/ 16 марта 2010

Я думаю, что проблема в том, что вы установили 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. Они всегда занимают столько места, сколько им нужно. И если им не будет предоставлено столько места, часть контента будет просто скрыта.

gehho.

2 голосов
/ 16 марта 2010

Попробуйте вывести «MaxWidth» из определения второго столбца и установите для Width значение «*».

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

Это сохраняет явные настройки от позиционирования вашего второго столбца слева.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...