【问题标题】:WPF resize issues when using RowDefinition Height="*" in Grid在 Grid 中使用 RowDefinition Height="*" 时 WPF 调整大小问题
【发布时间】:2013-07-19 16:00:02
【问题描述】:

更新我将 UserControl 定义添加到 XAML。

我注意到我最近创建的几个 WPF 应用程序中有一些奇怪的行为,这似乎与使用“*”作为网格行高或列宽有关。

我所指的行为是当试图扩展控件中的项目(如树视图)时,整个窗口将调整其高度而不是创建滚动条。因此,如果我只是运行应用程序并开始扩展节点,当项目超出 UI 的可见部分时,窗口将调整大小。

但是如果我先调整窗口大小,或者甚至只是单击底部或右边框(实际上没有调整大小),那么它会正常运行并保持窗口高度不变,并打开滚动条树视图。

<UserControl x:Class="ProjectZ.Views.GenericDefinitionView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:cal="http://www.caliburnproject.org"
             xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
             xmlns:xcad="http://schemas.xceed.com/wpf/xaml/avalondock"                
             xmlns:local="clr-namespace:ProjectZ"
             xmlns:behaviors="clr-namespace:ProjectZ.Behaviors"
             mc:Ignorable="d" d:DesignHeight="600" d:DesignWidth="600">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="20" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Menu Grid.Row="0" Name="mnuMainMenu" IsMainMenu="True">
            ... menu stuff
        </Menu>
        <xcad:DockingManager ... />
    </Grid>
</UserControl>

我玩过它,它似乎总是在我使用“*”值作为网格行高或列宽后开始发生。如果我把它拿出来,它似乎表现正常。

还有其他人遇到过这种情况吗?任何想法我做错了什么或可以采取不同的方式来解决这个问题?我认为可能相关的唯一其他信息是这是使用 Caliburn.Micro。启动时传递给窗口的唯一设置是:MinHeight、MinWidth、Title 和 Icon。

【问题讨论】:

  • 显示窗口 XAML 定义
  • 我添加了 UserControl 定义。 Window 没有任何 XAML,因为它是由 Caliburn.Micro 创建的。我在启动时传递给窗口的唯一设置是我在问题末尾列出的四个。让我知道我是否可以提供任何其他有用的信息,谢谢!

标签: wpf caliburn.micro


【解决方案1】:

问题是您永远不会在元素上方的可视树中指定高度。

如果您想有效地使用星号大小,您创建的UserControlWindow 需要特定的高度。否则,在运行时“选择”高度,但窗口实际上是按内容设置的大小。当您更改项目时,窗口会调整大小。

只要您触摸边框,就会设置Height(无论您是否调整大小),在这种情况下,它会正确指示布局。

如果您在创建 Window 时为其指定默认高度,则问题可能会自行解决。

【讨论】:

  • 谢谢@Reed!这让我走上了正确的道路。我已经尝试设置窗口的高度/宽度,但您的回答让我想到了SizeToContent 属性。事实证明,在 Caliburn.Micro 正在创建的窗口中,设置为 WidthAndHeight,即使我设置了实际高度,这也让我感到困惑。当我将其更改为 Manual 时,它按预期工作。再次感谢!
【解决方案2】:

调整大小一定是代码造成的:

<UserControl
    //...stuff>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
    </Grid>
</UserControl>

这里的可以理解为“在先放置所有其他元素之后,占用所有可用空间的其余部分”。因此,当您在控件中添加另一个元素时,视图将自行设置,而

<RowDefinition Height="*" />

将相应地调整自身大小以占用剩余的可用空间。要删除它,您可以只为行设置一个特定的高度,或者另一个想法是在行定义中添加另一个 Grid ,这样它就不会调整大小,因为它总是在行内,但仍然具有它的所有功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 2017-06-01
    • 1970-01-01
    相关资源
    最近更新 更多