Почему мой GridSplitter не работает вообще?
я переношу приложение WinForms на WPF. До сих пор все шло хорошо, за исключением моих попыток использовать GridSplitter, который я никогда не могу сшить, чтобы изменить размер чего-либо во время выполнения.
чтобы убедиться, что это не только мой код, я попытался скомпилировать образец GridSplitter от LearnWPF.com и, похоже, это тоже не работает. Я ожидаю увидеть стандартный курсор изменения размера, когда я наведу курсор мыши на разделитель, который не происходит, и насколько я могу видеть там нет другого визуального представления разделителя в окне.
что я пропустила?
<Window x:Class="UI.Test"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Test" Height="300" Width="300">
<Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<StackPanel Background="#feca00" Grid.Column="0">
<TextBlock FontSize="35" Foreground="#58290A"
TextWrapping="Wrap">Left Hand Side</TextBlock>
</StackPanel>
<GridSplitter/>
<Border CornerRadius="10" BorderBrush="#58290A"
BorderThickness="5" Grid.Column="1">
<TextBlock FontSize="25" Margin="20" Foreground="#FECA00"
TextWrapping="Wrap">Right Hand Side</TextBlock>
</Border>
</Grid>
2 ответов
в вашем примере GridSplitter
помещается в первый столбец. Я не помню мои правила выравнивания WPF с верхней части головы, но я думаю, что он, вероятно, помещается в левой части первого столбца. Не совсем то, что ты хотел.
гораздо проще сделать GridSplitter
занять строку или столбец, чем пытаться поделиться строкой или столбцом с другими элементами управления.
<Window x:Class="UI.Test"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Test" Height="300" Width="300">
<Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Background="#feca00">
<TextBlock FontSize="35" Foreground="#58290A" TextWrapping="Wrap">
Left Hand Side
</TextBlock>
</StackPanel>
<GridSplitter
Width="4"
Grid.Column="1"
Background="Red"
VerticalAlignment="Stretch"
HorizontalAlignment="Center"/>
<Border
Grid.Column="2"
BorderBrush="#58290A"
BorderThickness="5"
CornerRadius="10">
<TextBlock FontSize="25" Foreground="#FECA00" TextWrapping="Wrap">
Right Hand Side
</TextBlock>
</Border>
</Grid>
</Grid>
</Window>
вам не хватает важной концепции Z-упорядочения. Элементы управления размещаются в z-порядке в порядке их перечисления. В принципе, ваш разделитель сетки покрывается последним столбцом. Если вы поместите разделитель сетки над последним столбцом в z-порядке, он должен работать нормально, не требуя дополнительного столбца:
<Window x:Class="UI.Test"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Test" Height="300" Width="300">
<Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<StackPanel Background="#feca00" Grid.Column="0">
<TextBlock FontSize="35" Foreground="#58290A" TextWrapping="Wrap">Left Hand Side</TextBlock>
</StackPanel>
<Border CornerRadius="10" BorderBrush="#58290A" BorderThickness="5" Grid.Column="1">
<TextBlock FontSize="25" Margin="20" Foreground="#FECA00" TextWrapping="Wrap">Right Hand Side</TextBlock>
</Border>
<GridSplitter Grid.Column="1"/>
</Grid>
</Grid>