在Windows应用商店XAML中扩展TextBox的高度

时间:2014-07-24 18:25:39

标签: c# xaml windows-store-apps

作为参考,我试图重新创建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>

有谁知道如何让它发挥作用?

更新1

这是目前的截图。

Screenshot

更新2

好的,我越来越近了。

首先,我意识到我错过了TextWrap =&#34; Wrap&#34; TextBox控件的指令。不幸的是,设置导致了这个:

Screenshot after applying TextWrap to TextBox

受到Yuliam和Chris的评论的启发,我尝试设置特定的宽度和高度,并取得不同程度的成功。最接近我得到我想要的是通过将文本框的MinWidth属性设置为500.这产生了这个:

Screenshot after applying MinWidth to TextBox

这更接近我想要的东西。但我仍然无法让TextBox水平扩展以填充网格列。我已经尝试明确指定Horizo​​ntalAlignment和Horizo​​ntalContentAlignment,但没有更改。

看起来TextBox真的只想在一个方向上动态扩展。您可以获得水平或垂直扩展,但不能同时获得两者。

1 个答案:

答案 0 :(得分:1)

Grid's HeightMinHeight设置为特定高度(例如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>