边框控件没有填充网格的行宽

时间:2012-08-14 11:50:12

标签: xaml windows-8 microsoft-metro

我有一个网格控件,它已按列分割。

<Grid HorizontalAlignment="Stretch">
    <Grid.ColumnDefinitions>
         <ColumnDefinition />
         <ColumnDefinition Width="80" />
         <ColumnDefinition Width="65" />
    </Grid.ColumnDefinitions>
</Grid>

我在第0列中有一个边框控件。但是我遇到的问题是边框控件没有填充到此列的宽度。边框包含启用了Wrapping的文本块。如果textblock中的文本大于宽度,则它会被包裹并延伸以填充可用空间。

但是,如果文本块包含仅约5-10个字符的小文本,则边框控件不会延伸。

边框控件使用Horizo​​ntalAlignment和VerticalAlignment显式设置为拉伸和边距为0.但是边框仍然没有延伸到第0列中可用的空间?

4 个答案:

答案 0 :(得分:1)

请告诉我们您对边境的定义。它位于星号大小的列中,但您可能已经Border一个HorizontalAlignmentVerticalAlignment,这将取消填充父级内容区域的默认行为。我已经验证了这个示例在Kaxaml中运行良好。

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="80"/>
            <ColumnDefinition Width="65"/>
        </Grid.ColumnDefinitions>
        <Border Background="LightGreen"/>
        <TextBlock Grid.Column="1" Foreground="Blue" Text="Column01"/>
        <TextBlock Grid.Column="2" Foreground="Red" Text="Column02"/>
    </Grid>
</Page>

答案 1 :(得分:0)

尝试设置边框的宽度。如果要让边框占用空间,请将ColumnDefinition设置为*(First)

答案 2 :(得分:0)

相信你的第一栏不能

<ColumnDefinition />

相反,我认为它应该是

<ColumnDefinition Width="*" />

ColumnDefinition.Width的类型为GridLength。 GridLength是一个结构,它默认为“Auto”。 Auto会尝试占用其子控件所需的最小空间。值“*”表示相对于其他*列占用所有空间。 (2 *列将占用1 *列的两倍空间。我通常建议使用1到100之间的数字,并将它们视为百分比)。由于没有其他列是*列,因此简单的“*”值意味着占用所有剩余空间。

你会认为通过将所有其他列固定为宽度,它会强制第一列为“*”,但我不认为是这种情况。

您可以在此处阅读有关GridLength的更多信息:

http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.gridlength.aspx

答案 3 :(得分:-1)

  <DataGridTemplateColumn Width="150">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Border HorizontalAlignment="Stretch"
                                    VerticalAlignment="Stretch"
                                    BorderBrush="Red"
                                    BorderThickness="2">
                                <TextBlock Text="{Binding Name}" />
                            </Border>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>