【发布时间】:2016-01-26 04:56:24
【问题描述】:
我在我的 WPF 应用程序中使用GridSplitter,并希望将其设置为代码中的特定初始位置。在为关联的RowDefinition 的Height 属性设置特定值时,我被GridSplitter 的行为所困扰。
这是我的例子来说明这个问题。我添加了TextBlocks 来显示RowDefinition.Height 属性的实际值。
XAML 代码:
<Grid>
<Grid.RowDefinitions>
<RowDefinition x:Name="RowDef1" Height="*" MinHeight="20"/>
<RowDefinition Height="Auto" />
<RowDefinition x:Name="RowDef2" Height="*" MinHeight="20"/>
</Grid.RowDefinitions>
<DockPanel Grid.Row="0" LastChildFill="True" >
<TextBlock FontSize="16" VerticalAlignment="Top" Text="Upside Height: "/>
<TextBlock x:Name="Tbl1" FontSize="16" Text="{Binding Height}"/>
</DockPanel>
<GridSplitter Grid.Row="1" Height="10" HorizontalAlignment="Stretch" ResizeBehavior="PreviousAndNext" Background="Black" />
<DockPanel Grid.Row="2" LastChildFill="True" >
<TextBlock FontSize="16" VerticalAlignment="Top" Text="Downside Height: "/>
<TextBlock x:Name="Tbl2" FontSize="16" Text="{Binding Height}"/>
</DockPanel>
</Grid>
代码隐藏:
namespace WpfGridSplitterTest
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Tbl1.DataContext = this.RowDef1;
Tbl2.DataContext = this.RowDef2;
}
}
}
结果按预期工作。 GridSplitter 调整窗口的两个部分的大小,遵循MinHeight 的值并在窗口边界处停止。调整窗口大小也可以按设计工作:-)
现在我正在尝试从代码隐藏中设置 GridSplitter 的初始位置,如下所示:
InitializeComponent();
RowDef1.Height = new GridLength(50, GridUnitType.Pixel);
Tbl1.DataContext = this.RowDef1;
Tbl2.DataContext = this.RowDef2;
结果很奇怪:
-
GridSplitter最初设置为距顶部 50 像素(没关系) - 它停在 20px 的上排
MinHeight(也可以)
但是
- 它不再尊重窗口的下边界,也不再尊重下一行的
MinHeight值 -
ActualHeightGridSplitter 移动时,下一行的值不再更新
我在这里缺少什么?非常感谢任何提示!
我已阅读这篇文章,但答案在我的情况下不起作用: How to set initial height of a GridSplitter 'pane'?
将Height="*" 更改为Height="Auto" 也不能解决问题。
【问题讨论】:
标签: wpf gridsplitter