2016-04-28 4 views
0

Кажется, я не могу использовать GridSplitter для изменения размера next item. Вот XAML:GridSplitter изменить размер

<Grid> 
    <!-- this works --> 
    <Grid Background="Gray" HorizontalAlignment="Left"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="100" /> 
      <ColumnDefinition Width="auto" /> 
      <ColumnDefinition Width="auto" /> 
     </Grid.ColumnDefinitions> 
     <GridSplitter Grid.Column="1" Width="10" ResizeBehavior="PreviousAndNext" /> 
    </Grid> 
    <!-- this doesn't --> 
    <Grid Background="Gray" HorizontalAlignment="Right"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="auto" /> 
      <ColumnDefinition Width="auto" /> 
      <ColumnDefinition Width="100" /> 
     </Grid.ColumnDefinitions> 
     <GridSplitter Grid.Column="1" Width="10" ResizeBehavior="PreviousAndNext" /> 
    </Grid> 
</Grid> 

и демо:

Обратите внимание, что осталось Grid может быть изменен, в то время как правая имеет некоторые проблемы. Вы можете попробовать, предоставив xaml самостоятельно, чтобы понять, что я имею в виду.

Что делать, чтобы сделать следующий Элемент изменения размера?

ответ

1

Я сделал его работу, изменяя ColumnDefinition Ширина

<Grid> 
    <Grid Background="Gray" HorizontalAlignment="Left"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="100" /> 
      <ColumnDefinition Width="auto" /> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <GridSplitter Grid.Column="1" Width="10" ResizeBehavior="PreviousAndNext" /> 
    </Grid> 
    <Grid Background="Gray" HorizontalAlignment="Right"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="auto" /> 
      <ColumnDefinition Width="100" /> 
     </Grid.ColumnDefinitions> 
     <GridSplitter Grid.Column="1" Width="10" ResizeBehavior="PreviousAndNext" /> 
    </Grid> 
</Grid> 

и другой вариант мне нравится больше:

<Grid> 
    <Grid Background="Gray"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="100" /> 
      <ColumnDefinition Width="auto" /> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="auto" /> 
      <ColumnDefinition Width="100" /> 
     </Grid.ColumnDefinitions> 

     <GridSplitter Grid.Column="1" Width="10" ResizeBehavior="PreviousAndNext" /> 

     <Border Grid.Column="2" Background="Gold"/> 

     <GridSplitter Grid.Column="3" Width="10" ResizeBehavior="PreviousAndNext" /> 
    </Grid> 
</Grid> 
+0

У вас есть объяснение, почему '*' работает и 'auto' также работает, но только в одном направлении? Моя проблема состоит в том, чтобы иметь * необязательный * контент в столбце без изменения размера, поэтому он должен быть 'auto'. Не уверен, что он будет работать с '*', дай мне минуту. – Sinatr

+0

@ Синат, я могу только предположить, что это внутренняя логика сплиттера. Поскольку сетки имеют горизонтальное выравнивание влево и вправо, '*' становится 'auto' – ASh