6

这个问题源于无法让我的 TextBlock 换行。基本上作为最后的尝试,我在容器网格的列上设置 MaxWidth。我惊讶地发现我的子标签和文本框仍然可以为所欲为(坏孩子,BAD),并且不受我的网格列的 MaxWidth =“200”的限制。

我真正想做的是让我的 TextBlock 填充可用宽度并在必要时换行。到目前为止,在宇宙中每个已知的父级上尝试了许多 Horizo​​ntalAlignment="Stretch" 的变体之后,除了在 TextBlock 上设置显式 MaxWidth="400" 或任何数字外,没有任何效果。这不好,因为我需要 TextBlock 来填充可用宽度,不受某个固定数字的限制。谢谢!

<ItemsControl>
   <ItemsControl.ItemsPanel>
       <ItemsPanelTemplate>
           <StackPanel />
       </ItemsPanelTemplate>
   </ItemsControl.ItemsPanel>
   <ItemsControl.ItemTemplate>
       <DataTemplate>
           <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition MaxWidth="200" SharedSizeGroup="A" />
                <ColumnDefinition MaxWidth="200" SharedSizeGroup="B" />
            </Grid.ColumnDefinitions>

            <Label VerticalAlignment="Top" Margin="0 5 0 0" Grid.Column="0" Style="{StaticResource LabelStyle}" Width="Auto" Content="{Binding Value.Summary}" />
            <TextBlock Grid.Column="1" Margin="5,8,5,8" FontWeight="Normal"
                       Background="AliceBlue"
                       Foreground="Black" Text="{Binding Value.Description}" 
                       HorizontalAlignment="Stretch"
                       TextWrapping="Wrap" Height="Auto" />
           </Grid>
       </DataTemplate>
   </ItemsControl.ItemTemplate>
</ItemsControl>
4

2 回答 2

2

我试图通过将 Grid 元素之间的所有内容粘贴到 Kaxaml 来复制您的问题,但所有内容都按照您的预期进行包装。(我在您进行绑定的地方插入了常规字符串并删除了 Label 样式)。

可能是问题在树的更高层。

我建议将块粘贴到 Kaxaml 或类似内容中以测试并查看哪个父级破坏了您的 UI。

于 2009-02-12T03:28:32.720 回答
1

我提供了这个问题的答案,只是它使用的是 ListView 而不是 ItemsControl,但问题可能是一样的。您的 ItemPresenter 周围可能有一个 ScrollViewer,您需要编辑 ItemsControl 模板的副本。

WPF ListView TextBlock TextWrapping

于 2011-07-26T22:08:24.240 回答