2010-06-01 6 views
8

Я переношу приложение WinForms в WPF. До сих пор все прошло хорошо, кроме как по отношению к моим попыткам использовать GridSplitter, который я никогда не смогу сделать, чтобы изменить размер во время выполнения.Почему мой GridSplitter не работает вообще?

Чтобы убедиться, что это был не только мой код, я попытался скомпилировать GridSplitter sample с 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

Оставьте свой XAML в GridSplitter, пожалуйста. – JustABill

ответ

9

В вашем примере, 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> 
+0

Я не знал, что VerticalAlignment = "Stretch" и HorizontalAlignment = "Center" на GridSplitter настолько неизбежны – peter70

-1

Вам не хватает важной концепции Z-Ordering. Элементы управления помещаются в 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> 
Смежные вопросы