UPDATE 我将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。
答案 0 :(得分:1)
问题是你从不在元素上方的可视树中指定高度。
如果您想有效地使用星形大小,那么您创建的UserControl
或Window
需要特定的高度。否则,在运行时“选择”高度,但窗口有效地按内容设置大小。当您更改项目时,窗口会调整大小。
一旦触摸边框,就会设置Height
(无论您是否调整大小),在这种情况下,它会正确地指示布局。
如果您为Window
指定了默认高度,则该问题可能会自行解决。
答案 1 :(得分:0)
调整大小必须由代码引起:
<UserControl
//...stuff>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
</Grid>
</UserControl>
&lt; *&gt;可以理解为“在将所有其他元素放在第一位之后,占用所有可用空间”。因此,当您在控件中添加另一个元素时,视图将设置自己和
<RowDefinition Height="*" />
将根据剩余的可用空间调整自身的大小。要删除它,你可以只为行设置一个特定的高度,或者另一个想法是在行定义中添加另一个Grid,这样它就不会调整大小,因为它总是在行内,但仍然具有所有的功能。