WPF网格列MaxWidth未强制执行

时间:2009-02-11 22:35:32

标签: wpf layout grid textwrapping

此问题源于无法将TextBlock包装。基本上作为最后的尝试我在容器网格的列上设置MaxWidth。我很惊讶地发现我的孩子标签和文本框仍然可以做任何他们想做的事(坏孩子,不好)并且不受我的网格列的MaxWidth =“200”的限制。

我真正想做的是让我的TextBlock填充可用宽度并在必要时包装。到目前为止,在Universe中每个已知父级上尝试使用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>

2 个答案:

答案 0 :(得分:2)

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

问题可能在树上更高。

我建议将块粘贴到Kaxaml或类似的测试中,看看哪个父打破了你的UI。

答案 1 :(得分:1)

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

WPF ListView TextBlock TextWrapping