wpf网格拆分器问题--双方都收缩
网格拆分器故障: 我有一个:网格,有4列wpf网格拆分器问题--双方都收缩,wpf,xaml,gridsplitter,Wpf,Xaml,Gridsplitter,网格拆分器故障: 我有一个:网格,有4列 列0包含一个包含3列的网格 列1包含一个gridsplitter 第2列包含宽度为20像素的stackpanel 第3列包含一个包含3列的网格 当gridsplitter向左或向右移动时,两个面板的收缩量相同——一个面板应收缩,另一个面板应增大 我很犹豫是否包含xaml,但您会要求它,所以这里有一个节略版本。我只删除了几个不相关的控件,并删除了TreeView和ListView。如果你真的需要整件东西,那么我当然可以提供 谢谢你的帮助 <Win
- 列0包含一个包含3列的网格
- 列1包含一个gridsplitter
- 第2列包含宽度为20像素的stackpanel
- 第3列包含一个包含3列的网格
<Window x:Class="Calvin.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="Calvin" >
<DockPanel Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" LastChildFill="True" >
<Grid DockPanel.Dock="Top" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" RenderTransformOrigin="0.5,0.497" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="5" />
<ColumnDefinition Width="20" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="5" />
<ColumnDefinition Width="2*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBox Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" TextWrapping="NoWrap" Text="Field One" HorizontalAlignment="Stretch"/>
<TextBox Grid.Row="0" Grid.Column="4" Grid.ColumnSpan="3" TextWrapping="NoWrap" Text="Field Two" HorizontalAlignment="Stretch" />
<TreeView DockPanel.Dock="Left" Grid.Column="0" Grid.Row="1" Name="PaneOneTree"
Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
</TreeView>
<GridSplitter Grid.Column="1" Grid.Row="1" Width="5" HorizontalAlignment="Center"/>
<ScrollViewer Grid.Column="2" Grid.Row="1" >
<ListView DockPanel.Dock="Left" Name="FileDetailsLeft" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" >
<ListView.View>
<GridView>
<GridViewColumn Header="Name" Width="120" />
<GridViewColumn Header="Size" Width="120" />
<GridViewColumn Header="Access Time" Width="120" />
<GridViewColumn Header="Extension" Width="120" />
</GridView>
</ListView.View>
</ListView>
</ScrollViewer>
</Grid>
<GridSplitter Grid.Column="1" Grid.Row="0" Width="5" HorizontalAlignment="Left" />
<StackPanel Grid.Column="2" Grid.Row="1" VerticalAlignment="Stretch" HorizontalAlignment="Center" Width="Auto" Background="Red">
<Button >Move</Button>
<Button >Other</Button>
</StackPanel>
<Grid Grid.Column="3" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="5" />
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBox Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" TextWrapping="NoWrap" Background="Cornsilk"
Text="Pane Two Text" HorizontalAlignment="Stretch"/>
<TextBox Grid.Row="0" Grid.Column="4" Grid.ColumnSpan="3" TextWrapping="NoWrap"
Text="Pane Two Text" HorizontalAlignment="Stretch" Background="Linen" />
<TreeView DockPanel.Dock="Left" Grid.Column="0" Grid.Row="1" Name="PaneTwoTree" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Background="SeaShell" >
</TreeView>
<GridSplitter Grid.Column="1" Grid.Row="1" Width="5" HorizontalAlignment="Center" />
<ScrollViewer Grid.Column="2" Grid.Row="1" >
<ListView DockPanel.Dock="Left" Name="FileDetailsRight"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Background="Moccasin" >
<ListView.View>
<GridView>
<GridViewColumn Header="Name" Width="120" />
<GridViewColumn Header="Size" Width="120" />
<GridViewColumn Header="Access Time" Width="120" />
<GridViewColumn Header="Extension" Width="120" />
</GridView>
</ListView.View>
<ListViewItem >List Item</ListViewItem>
<ListViewItem >List Item</ListViewItem>
<ListViewItem >List Item</ListViewItem>
<ListViewItem >List Item</ListViewItem>
<ListViewItem >List Item</ListViewItem>
<ListViewItem >List Item</ListViewItem>
<ListViewItem >List Item</ListViewItem>
</ListView>
</ScrollViewer>
</Grid>
</Grid>
</DockPanel>
</Window>
移动
其他
列表项
列表项
列表项
列表项
列表项
列表项
列表项
当然,你可以自由地提出更好的方法来做任何事情:)--我还在学习
:bp:好的,我现在明白你的问题了。。。基本上,您无法在列上设置准确的
宽度
,而宽度
将由GridSplitter
控件更改。相反,您只能在ColumnDefinition
上设置MinWidth
和/或MaxWidth
属性,但请注意,您不能使用“*”
符号。另外,看看下面的代码示例,您可以看到,您可以为您的问题示例剥离一整段代码。。。这就是证明您的问题所需的全部内容(在我解决问题之前):
我也有同样的问题。当我移动一个GridSplitter时,它也会移动另一个(通常方向相反)。我最终发现我忘了设置GridSplitter的属性。对于GridSplitter,必须同时设置垂直和水平属性,即
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<GridSplitter Grid.Column="1" Width="2"
VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
</Grid>
-1从代码示例中无法再现您的问题,即使您花费了很长时间删除了所有未包含的代码引用。如果您编辑您的代码示例并提供一个示例,我很乐意删除我的反对票。首先,您可以删除所有的绑定
,只需设置高度
s和宽度
s来模拟控件的大小,并将数据放入其中。谢谢您--我已将xaml代码更新到一个项目中,该项目将演示此问题。谢谢你的帮助,是吗?我认为你还没有完全做到这一点。。。您是否测试了您在此处输入的代码?我不认为你这样做了,因为我可以看到它甚至不会立即编译。请再试一次,并确实确保您可以将其加载到一个空项目中。它已被测试,但格式化删除了其中的一部分--如何以及为什么是一个谜。现在看来已经完成了。+1啊哈,成功了!现在我可以为您看一看。“*”符号工作良好,如果“垂直对齐”和“水平对齐”都设置在下面;否则,您只能以像素为单位设置默认宽度。哇!非常感谢。我已经为此挣扎了很长一段时间。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<GridSplitter Grid.Column="1" Width="2"
VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
</Grid>