如何使元素自动扩展以填充 space 而无需接管?

How to make an element auto-expand to fill space without taking over?

我正在 XAML 和 WPF 中创建自定义日历。日历由七个 <Grid> 列组成,可以使用 window.

自动扩展(例如 width="1*"

这是现在发生的事情:

一个非常宽的元素“接管”了列并使其他列变小,这不是我想要的。

我希望它看起来像这样:

在此示例中,列会自动扩展以填充可用宽度(window 大小),但元素不能使一列变大。我知道实现此目的的唯一方法是设置宽度 属性( 但它不会自动扩展 )。

这是示例代码。它会产生像第一张图片一样的输出:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
    </Grid.ColumnDefinitions>
    <TextBlock Text="Hello world this is a sample very long text!" Grid.Column="1"/>
    <TextBlock Text="Hello world !" Grid.Column="2"/>
</Grid>

我怎样才能达到这个期望的输出?

编辑: 我在我的网格周围使用了 ScrollViewer(在有很多作业的情况下垂直滚动)。 属性 HorizontalScrollBarVisibility="Hidden" 实际上导致了这种奇怪的行为。

我不确定它是否能解决您的问题,但如果文本溢出,您可以尝试换行,如下所示:

<TextBlock Text="Some long text" TextWrapping="Wrap">

让我知道这是否有帮助,如果没有,我可以深入研究!

我没有看到这种行为。当我尝试您的代码片段时,文本不会“接管”其他列。它被剪掉了(见下文)

Sample without TextWrapping

您似乎想将 TextBlock 的 TextWrapping 属性设置为“Wrap”。

<TextBlock Text="Hello world this is a sample very long text!" Grid.Column="1" TextWrapping="Wrap"/>

Sample with TextWrapping="Wrap"