Для справки, я как бы пытаюсь воссоздать способ отображения мгновенных сообщений Skype. Имя отправителя слева (выравнивание влево/вправо) и текст сообщения справа. Текст справа должен быть зафиксирован, но динамически расширяться вертикально, чтобы отобразить все сообщение.
Я показываю эти сообщения в ListView. Он выглядит больше или меньше, чем я хочу, но я не могу заставить элемент управления TextBox расширяться вертикально. Он либо потребляет одну строку шириной 100%, а текст уходит с правого края или расширяется вертикально, одновременно уменьшая ширину до некоторого значения (я не могу понять, откуда это значение).
Вот что у меня сейчас. Я также пробовал вложенные StackPanels.
<ListView
x:Name="MessagesListView"
ItemsSource="{Binding Messages}"
TabIndex="1"
Padding="116,46"
Margin="0,0,0,46"
VerticalContentAlignment="Stretch"
SelectionMode="None"
IsItemClickEnabled="false"
IsSwipeEnabled="false">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock
Grid.Column="0"
Text="{Binding ContactDisplayName}"
Margin="0,0,20,0"
TextWrapping="WrapWholeWords" />
<StackPanel Grid.Column="1" Orientation="Vertical">
<TextBox Text="{Binding MessageText}" IsReadOnly="true" />
<TextBlock Text="{Binding TimestampDisplayText}" TextWrapping="Wrap" />
</StackPanel>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Кто-нибудь знает, как заставить это работать?
Вот скриншот того, как он выглядит в настоящее время.
Хорошо, я приближаюсь.
Во-первых, я понял, что мне не хватает директивы TextWrap = "Wrap" в элементе управления TextBox. К сожалению, установка, которая привела к этому:
Вдохновленный комментариями Юлиама и Криса, я попытался установить конкретные ширины и высоты с разными уровнями успеха. Ближайший я получил, чтобы получить то, что я хочу, установив свойство MinWidth текстового поля на 500. Это дает следующее:
Это намного ближе к тому, что я хочу. Но я до сих пор не смог заставить TextBox расширяться горизонтально, чтобы заполнить столбец сетки. Я пробовал явно указывать HorizontalAlignment и HorizontalContentAlignment, но никаких изменений.
Кажется, TextBox действительно хочет динамически расширяться в ОДНОМ направлении. Вы либо получаете горизонтальное, либо вертикальное расширение, но не оба.
После установки Grid Height
или MinHeight
на определенную высоту (ex 100).
Изменить этот код
<StackPanel Grid.Column="1" Orientation="Vertical">
<TextBox Text="{Binding MessageText}" IsReadOnly="true" />
<TextBlock Text="{Binding TimestampDisplayText}" TextWrapping="Wrap" />
</StackPanel>
в
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBox Grid.Row="0" Text="{Binding MessageText}" IsReadOnly="true" />
<TextBlock Grid.Row="1" Text="{Binding TimestampDisplayText}" TextWrapping="Wrap" />
</Grid>
ContactDisplayName
в каждом элементе / строке пропорционально заполняло доступное пространствоListView
? скриншот вашей проблемы был бы великолепен ..