作为参考,我试图重新创建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 =&#34; Wrap&#34; TextBox控件的指令。不幸的是,设置导致了这个:
受到Yuliam和Chris的评论的启发,我尝试设置特定的宽度和高度,并取得不同程度的成功。最接近我得到我想要的是通过将文本框的MinWidth属性设置为500.这产生了这个:
这更接近我想要的东西。但我仍然无法让TextBox水平扩展以填充网格列。我已经尝试明确指定HorizontalAlignment和HorizontalContentAlignment,但没有更改。
看起来TextBox真的只想在一个方向上动态扩展。您可以获得水平或垂直扩展,但不能同时获得两者。
答案 0 :(得分:1)
将Grid's Height
或MinHeight
设置为特定高度(例如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>