Проблема разделителя сетки WPF
У меня есть этот контроль:
Изображение: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/999d1290-2d69-4cd0-9396-072e765e8364
Как добавить GridSplitter рядом с верхней стрелкой, чтобы при перетаскивании сплиттера высота оранжевой трубы увеличивалась. Вы можете только перетащить вниз (вверх не допускается)
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="900">
<Grid x:Name="LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="auto" />
<RowDefinition Height="40" />
<RowDefinition Height="auto"/>
<RowDefinition Height="20" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
<Grid x:Name="arrowLine" Grid.Row="0" Grid.Column="0" Height="20" Width="1" Background="Black"/>
<Polygon Grid.Column="0" Grid.Row="1" Fill="Black" Points="0,-6 10,-6 5,0" FillRule="Nonzero" HorizontalAlignment="Center" />
<!-- The gripper on the Top -->
<StackPanel Grid.Row="2">
<Grid Grid.Column="1" Margin="0,0,0,0" VerticalAlignment="Top" Width="100" Height="40">
<Rectangle x:Name="OrangeBar" Fill="#FFD61D2B">
</Rectangle>
<Rectangle x:Name="OrangeBarShine">
<Rectangle.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#00000000" Offset="1"/>
<GradientStop Color="#FFFFB141" Offset="0.172"/>
<GradientStop/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
</Grid>
</StackPanel>
<Polygon Grid.Column="0" Grid.Row="3" Fill="Black" Points="0,6 10,6 5,0" FillRule="Nonzero" HorizontalAlignment="Center" />
<Grid Grid.Row="4" Grid.Column="0" Height="20" VerticalAlignment="Center" Width="1" Background="Black"/>
<Line Grid.Row="5" X1="25" Y1="0" X2="50" HorizontalAlignment="Center" Y2="20" StrokeThickness="1" Stroke="Black"></Line>
<Line Grid.Row="5" Grid.Column="1" X1="-25" Y1="20" X2="130" Y2="20" Fill="Black" HorizontalAlignment="Left" StrokeThickness="1" Stroke="Black"></Line>
</Grid>
2 ответа
Что плохого в увеличении его снизу?
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="40" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Background="White"/>
<StackPanel Grid.Row="1" Grid.Column="0" Background="Orange"/>
<GridSplitter Grid.Row="2"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
Background="White"
ShowsPreview="True"
Height="5"/>
<StackPanel Grid.Row="3" Grid.Column="1" Background="White"/>
</Grid>
Если вы хотите сделать это, не перемещая верхнюю часть бара, это плохая идея. Даже если бы вы могли заставить его работать, перетаскивание основано на дельте. И только небольшое перетаскивание приведет к тому, что панель внезапно станет больше экрана.
Если вы хотите изменить размер стержня и одновременно переместить его местоположение в равных количествах, рассмотрите возможность связывания ячейки над стержнем и высоты стержня вместе.
Подумайте о перемещении сплиттера ниже полосы. Затем установите минимальную высоту на панели на высоту всякий раз, когда высота панели изменяется.