gpt4 book ai didi

wpf - 寻找 WPF Grid ColumnSpan 行为的解释

转载 作者:行者123 更新时间:2023-12-04 06:47:38 25 4
gpt4 key购买 nike

我在 http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/5c7f5cdf-4351-4969-990f-29ce9ec84b87/ 上问了一个问题,但仍然缺乏对奇怪行为的良好解释。

运行以下 XAML 显示第 0 列中的 TextBlock 的宽度大于 100,即使该列设置为宽度 100。我认为奇怪可能与它被包装在 ScrollViewer 中有关,但我不知道为什么。如果我在列上设置 MaxWidth,它可以正常工作,但设置 Width 不会。

  • 为什么不遵守第 0 列的宽度?
  • 为什么删除滚动查看器时列大小的行为会有所不同?

  • 我很感激任何解释!这对我来说是一个真正的难题。
    <Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Width="300">
    <ScrollViewer HorizontalScrollBarVisibility="Auto" >
    <Grid>
    <Grid.RowDefinitions>
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
    <ColumnDefinition Width="100" />
    <ColumnDefinition Width="100" />
    <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <TextBlock x:Name="textBlock" Text="{Binding ElementName=textBlock, Path=ActualWidth}" />
    <TextBlock Text="column 1" Grid.Column="1" />
    <TextBlock Grid.Row="1" Grid.ColumnSpan="3" Text="text here that is wider than the first two columns combined" />
    </Grid>
    </ScrollViewer>
    </Window>

    最佳答案

    这是一个很好的问题,考验着我们直觉的极限。它揭示了 Grid 布局逻辑的实现细节。

    100 的宽度没有得到尊重,因为:

  • 第三列中没有任何内容导致网格为其提供宽度。
  • 第二行中的长文本比前两列更宽。
  • 当 Grid 的宽度不受其父级约束或设置时,其布局逻辑显然会拉伸(stretch)第一列而不是最后一列。

  • 通过将 MaxWidth 放在第一列,您限制了 Grid 的布局逻辑,因此它移动到第二列并拉伸(stretch)它。您会注意到在这种情况下它会比 100 更宽。

    但是,一旦 Grid 的宽度设置为特定值或受其父级约束(例如,当 Window 中没有 ScrollViewer 时),Grid 的宽度具有特定值,并且第三列即使设置了宽度也是空的。现在,网格的自动大小代码已停用,它不再拉伸(stretch)您的任何列以尝试挤入该文本。您可以通过在 Grid 上放置特定宽度来查看这一点,即使它仍在 ScrollViewer 中。

    编辑:现在我在您的原始线程中阅读了 MSDN 支持的答案,我相信它是正确的,这意味着这可能是附加属性实现的结果,而不是网格本身。然而,原理是一样的,希望我的解释足够清楚,可以理解这里的微妙之处。

    关于wpf - 寻找 WPF Grid ColumnSpan 行为的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5679081/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com