【问题标题】:Automatically resize rows of a grid contained in another grid自动调整另一个网格中包含的网格的行大小
【发布时间】:2011-08-13 22:43:46
【问题描述】:

我在另一个网格的第一列中有一个网格,并且希望内部网格的行与父网格的行具有相同的高度。这个想法是内部网格可以包含我希望能够隐藏的描述(但与父网格的行保持对齐,因为这些描述与父网格中的某些问题相关联)。 WPF ColumnDefinition 没有 Visibility 属性:(

到目前为止我的代码:

    <Grid ShowGridLines="true" Name="gridje">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" Name="row0"/>
        <RowDefinition Height="Auto" Name="row1"/>
        <RowDefinition Height="Auto" Name="row2"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Grid Grid.Row="0" Grid.RowSpan="3" ShowGridLines="true">
        <Grid.RowDefinitions>
            <RowDefinition Height="{Binding ElementName=row0, Path=ActualHeight, Mode=OneWay}"/>
            <RowDefinition Height="{Binding ElementName=row1, Path=ActualHeight, Mode=OneWay}"/>
            <RowDefinition Height="{Binding ElementName=row2, Path=ActualHeight, Mode=OneWay}"/>
        </Grid.RowDefinitions>
        <TextBlock Grid.Row="0">Joepie</TextBlock>
        <TextBlock Grid.Row="2">Joepie</TextBlock>
    </Grid>
    <TextBlock Grid.Row="0" Grid.Column="1" TextWrapping="WrapWithOverflow">Klaasje daskljf askldfas dfasjkl dfhklasjdfh askljdfh askljdfh h askljdfh klasdfh alsjkdfh askldfh askljfh alsdjkfh asklfh </TextBlock>
    <TextBlock Grid.Row="1" Grid.Column="1" TextWrapping="WrapWithOverflow">Klaasje daskljf askldfas dfasjkl dfhklasjdfh askljdfh askljdfh h askljdfh klasdfh alsjkdfh askldfh askljfh alsdjkfh asklfh</TextBlock>
    <TextBlock Name="textb" Grid.Row="2" Grid.Column="1" TextWrapping="WrapWithOverflow" Text="{Binding ElementName=row0, Path=ActualHeight, Mode=OneWay}"></TextBlock>
    <Button Content="Button" Grid.Column="1" Grid.Row="2" Height="23" HorizontalAlignment="Left" Margin="66,173,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
</Grid>

奇怪的是,在 VS2010 的设计模式下,一切正常,但一旦运行,所有实际高度属性都保持为零。

对此的任何帮助将不胜感激。并且也许使用一些其他的 WPF 控件来完成这个也没有问题。

【问题讨论】:

    标签: wpf


    【解决方案1】:

    也许Grid.IsSharedSizeScope 属性会帮助你。有了这个,您可以同步网格元素的宽度和高度。 msdn-article 中包含有关如何使用它的示例。

    【讨论】:

    • 我会试试的。并且:如何在第一列中使用一个带有描述的网格并将大小设置为零。我开车时在车里想到了这个;)但想知道我是否已经尝试过...
    • 将大小设置为零会导致右侧出现一个非常小的滚动条,因为它仍会尝试在“隐藏”列中显示内容...所以这不是一个选项。
    • @Joep Greuter:不确定我是否理解您的问题,但为什么不在第一列中插入信息文本块,将第一列的宽度设置为“自动”,然后隐藏/显示信息文本块相应地(通过绑定)。如果我正确理解您的问题,这将按照您的意愿行事。然后你也可以摆脱子网格,让设计更容易。顺便说一句,我已经读过绑定到 Active[Width|Height] 会降低布局性能。不确定这是否是事实,但我可以想象。因此,我会在投入生产之前进行一些测试。
    • @Joep Greuter:如果您想尝试使用 IsSharedSizeScope,我会尝试分离网格。不要让它们成为父/子,将它们彼此对齐,我可以想象这会更好。
    • 我想摆脱子网格。然后循环遍历第一个网格列中的所有 UIElement 并将它们设置为 Visibility.Collapsed 并将列的大小设置为零。感谢您的提示。第二条评论也是个好主意。尽管我认为我会选择另一种选择,但我会将您的答案标记为正确。我现在正在试用它们;)
    猜你喜欢
    • 2011-06-01
    • 2013-05-11
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多