
Simple GridSplitter的行为很奇怪,当我将它向左移到MinWidth之外时,另一列会无限扩展。这里我漏掉了什么?
<Grid>
<Grid x:Name="holdergrid" HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width ="*" MinWidth="300"/>
<ColumnDefinition Width ="425" MinWidth="300"/>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Content="Left"></Button>
<Button Grid.Column="1" Content="Right"></Button>
<GridSplitter Name="GridSplitterFolders" HorizontalAlignment="Left" Grid.Column ="1" Width ="10" ResizeBehavior="PreviousAndCurrent" />
</Grid>
</Grid>发布于 2013-05-30 03:55:37
添加一个宽度设置为Auto的columnDefinition以容纳GridSplitter本身,并将ResizeBehavior更改为PreviousAndNext。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width ="*" MinWidth="300"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width ="425" MinWidth="300"/>
</Grid.ColumnDefinitions>
<Label Content="Left" Grid.Column="0" />
<GridSplitter HorizontalAlignment="Right"
VerticalAlignment="Stretch"
Grid.Column="1" ResizeBehavior="PreviousAndNext"
Width="5" Background="#FFBCBCBC"/>
<Label Content="Right" Grid.Column="2" />
</Grid>发布于 2013-06-28 18:53:33
feO2x是对的。当GridSplitter具有混合的*和像素值时,出现无限宽度。
正确工作的水平GridSplitter示例应具有:
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*" MinWidth="200"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="1*" MinWidth="200"/>
</Grid.ColumnDefinitions>和
<GridSplitter Grid.Column="1" Width="6" Style="{StaticResource gridSplitterStyleVertical}"
HorizontalAlignment="Center"
VerticalAlignment="Stretch"
ResizeBehavior="PreviousAndNext"
ResizeDirection="Columns">通知
HorizontalAlignment="Center"为了让它正常工作,这一点也很重要
发布于 2013-05-30 04:02:47
在我看来,这是一个错误,当至少有一个列定义被设置为像素值时就会发生。如果您将列定义更改为星型值,那么一切都很好。看看你的代码的这个修改版本:
<Window x:Class="Gridsplitter.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow">
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<Grid x:Name="Holdergrid" MaxWidth="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=ActualWidth}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" MinWidth="300" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="400" MinWidth="300" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Content="{Binding RelativeSource={RelativeSource Self}, Path=ActualWidth}"></Button>
<Button Grid.Column="2" Content="{Binding RelativeSource={RelativeSource Self}, Path=ActualWidth}"></Button>
<GridSplitter Name="GridSplitterFolders" HorizontalAlignment="Center" VerticalAlignment="Stretch" Grid.Column ="1" Width ="5" ResizeBehavior="PreviousAndNext"/>
</Grid>
<StackPanel Grid.Row="1" Orientation="Horizontal">
<TextBlock Text="{Binding ElementName=Holdergrid, Path=ActualWidth, StringFormat=Actual Width: {0}}"></TextBlock>
<TextBlock Text="{Binding ElementName=Holdergrid, Path=Width, StringFormat=Width: {0}}" Margin="10 0 0 0"></TextBlock>
<TextBlock Text="{Binding ElementName=Holdergrid, Path=MaxWidth, StringFormat=Max Width: {0}}" Margin="10 0 0 0"></TextBlock>
</StackPanel>
</Grid>
</Window>当您将网格拆分器拖到左侧时,右侧的列将无限增长,甚至超过我限制的MaxWidth。如果将第三列定义中的Width="400"替换为Width="*",则它将正常工作。显然,这是让它工作的唯一方法。
https://stackoverflow.com/questions/16821911
复制相似问题