如何设置网格列的宽度,使其只有所需的大小。在我的情况下,自动不起作用

时间:2015-03-12 17:14:09

标签: wpf xaml layout

我有一个仅包含组合框的用户控件,它看起来像这样

<UserControl x:Class="LayoutProblem.ComboboxUserControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ComboBox Width="300" Height="30" VerticalAlignment="Top" HorizontalAlignment="Left"/>
</UserControl>

然后在另一个用户控件内部我添加了一个标签,所以看起来像这样

<Grid >
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Label Content="Short Label" HorizontalAlignment="Right" />
    <layoutProblem:ComboboxUserControl Grid.Column="1" />
    <Label Content="Extra long Label" HorizontalAlignment="Right" Grid.Row="1"/>
    <layoutProblem:ComboboxUserControl Grid.Column="1" Grid.Row="1"/>
</Grid>

然后下一个用户控件看起来像这样

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Label HorizontalAlignment="Right" Content="Some other label" />
    <TextBox Grid.Column="1"
             Width="50"
             Height="30"
             HorizontalAlignment="Left"
             VerticalAlignment="Top" />
</Grid>

最后在MainWindow中,我把它放在一起,看起来像这样

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto" />
        <RowDefinition Height="auto" />
    </Grid.RowDefinitions>
    <layoutProblem:InputUserControl/>
    <layoutProblem:ComboboxWithLabel Grid.Row="1" Grid.ColumnSpan="2" DataContext="{Binding DataContext2}" />
</Grid> 

因此所有这些都将控件放在一起,但我遇到了如何更改布局的麻烦。因为现在标签应该在第1列,文本框和组合框应该放在第2列.Itoes无关我设置的列定义,Auto,*或者没有列没有得到我想要的大小。如果我把列定义拿出来它突然起作用,但我需要它们,因为还有其他的东西会放在第二列。

我在线查看,但我找不到办法。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

使用IsSharedSizeScope = True和SharedSizeGroup =“”解决。