【问题标题】:Within a Grid, how to set a textblock's width在网格中,如何设置文本块的宽度
【发布时间】:2012-02-29 16:33:51
【问题描述】:

我有一个网格,有两列,这里是定义。

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="180"></ColumnDefinition>
        <ColumnDefinition Width="auto"></ColumnDefinition>
    </Grid.ColumnDefinitions>   
    <TextBlock Name="nText" Text="{Binding Name}" Grid.Column="0" />
    <TextBlock Name="vText" Text="{Binding Value}" Grid.Column="1" HorizontalAlignment="Left" TextWrapping="Wrap"/>
</Grid>

我的问题是,对于 vText,当 Text 太长时,无论 columndefinition 宽度是 auto 还是 *.但是,如果我为第 2 列的宽度或 vText 的宽度设置一个确定的值,文本将被换行。

如何设置文本块的宽度以便可以换行文本内容?

我尝试绑定columnDefinition的width/ActualWidth,但也失败了。

非常感谢。

【问题讨论】:

    标签: wpf


    【解决方案1】:

    细说BalamBalam的答案,改

    <ColumnDefinition Width="auto"></ColumnDefinition>
    

    <ColumnDefinition Width="*"></ColumnDefinition>
    

    会做你想做的,因为"auto" 模式期望根据子元素推断它的大小。在这种情况下,您的 TextBlock 没有定义宽度,因此 ColumnDefinition 无法推断宽度。

    由于 ColumnDefinition 和 TextBlock 都没有定义宽度,因此 TextBlock 的宽度将默认为无限大,并且自动换行算法永远不会剪切文本。

    相比之下,"*" 表示填充剩余空间,这将由网格(如果您在其上设置宽度)或其父项之一定义。最坏的情况是,"*" 将能够在顶层找到一个值,因为窗口总是有一个宽度/高度设置。

    希望这能更清楚地说明布局引擎如何利用尺寸发挥其魔力!

    【讨论】:

    • 谢谢。我试过“auto”和“*”,结果是一样的。
    • Grid 周围的包含控件有哪些? * 如果 FrameworkElement 链的大小增加,则应该能够获得非无限大小。如果在网格上设置宽度,“*”是否仍然不起作用?
    【解决方案2】:
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="180"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto" />
        </Grid.RowDefinitions>
        <TextBlock Grid.Column="0" Grid.Row="0" Name="nText" Text="nText"/>
        <TextBlock Grid.Column="1" Grid.Row="0" Name="vText" TextWrapping="Wrap">
            vText vTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvText
            vTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvText
            vTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvText
        </TextBlock>
    </Grid>
    

    【讨论】:

    • 感谢您的回复。 Text如何使用绑定数据?
    • 您是否尝试过使用您拥有的绑定?根据问题绑定工作只是不包装。
    猜你喜欢
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    相关资源
    最近更新 更多