15

3列のグリッドを持つアプリがあります。1 列目と 2 列目のグリッド スプリッターは問題なく機能します。スプリッターを 2 番目と 3 番目の列の間に配置するために、スプリッター用の列を作成しました。(したがって、3 列目は実際には 4 列目になります。)

サイズを変更すると、他の列も縮小します。これは、相対的なサイズに設定しているためだと思います。しかし、私はそれを修正する方法がわかりません。

これは、私の問題の XAML Pad Ready の例です。これを XAML パッドに接続し、最後の列のサイズを小さくしてみてください。

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="1*" />
        </Grid.ColumnDefinitions>
        <StackPanel Background="#feca00" Grid.Column="0">
            <TextBlock FontSize="35" Foreground="#58290A"
                   TextWrapping="Wrap">Left Hand Side</TextBlock>
        </StackPanel>
        <GridSplitter Width="10" />
        <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="2" HorizontalAlignment="Right"  VerticalAlignment="Stretch" Width="5"></GridSplitter>
        <TabControl Grid.Column="3" Name="tabControl1">
            <TabItem Header="Add Links" Name="tabAddLinks">
                <Grid></Grid>
            </TabItem>
        </TabControl>
    </Grid>
</Page> 

助けてくれてありがとう!


編集: 両方のスプリッターを独自の列に配置すると、それが修正される可能性があることが示唆されました。私はそれを試しましたが、最初のスプリッターも2番目のスプリッターのように列を縮小します。

その例の XAML Pad コードを次に示します。

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="1*" />
        </Grid.ColumnDefinitions>
        <StackPanel Background="#feca00" Grid.Column="0">
            <TextBlock FontSize="35" Foreground="#58290A"
                   TextWrapping="Wrap">Left Hand Side</TextBlock>
        </StackPanel>
        <GridSplitter Grid.Column="1" HorizontalAlignment="Right"  VerticalAlignment="Stretch" Width="5"></GridSplitter>
        <Border CornerRadius="10" BorderBrush="#58290A"
              BorderThickness="5" Grid.Column="2">
            <TextBlock FontSize="25" Margin="20" Foreground="#FECA00"
                   TextWrapping="Wrap">Right Hand Side</TextBlock>
        </Border>
        <GridSplitter Grid.Column="3" HorizontalAlignment="Right"  VerticalAlignment="Stretch" Width="5"></GridSplitter>
        <TabControl Grid.Column="4" Name="tabControl1">
            <TabItem Header="Add Links" Name="tabAddLinks">
                <Grid></Grid>
            </TabItem>
        </TabControl>
    </Grid>
</Page> 
4

2 に答える 2

53

HorizontalAlignment="Center"両方のスプリッターを設定してみてください-「右」に設定すると動作が非常に厄介になる理由がわかりませんが、変更するとうまくいきました:)

于 2009-12-12T23:12:04.583 に答える
8

GridSplitter は、Grid 内の独自の Column 内に配置する必要があります。問題を完全に理解しているかどうかはわかりませんが、5 つの ColumnDefinitions を使用してグリッドを作成することをお勧めします。列 1 と 2 を使用して GridSplitters を配置し、列 0、2、および 4 をコンテンツに配置します。

GridSplitter MSDN docには、これを行う方法のサンプルがあります。

<Grid.ColumnDefinitions>
  <ColumnDefinition/>
  <ColumnDefinition Width="Auto" />
  <ColumnDefinition/>
</Grid.ColumnDefinitions>
...
<GridSplitter Grid.Column="1"
          HorizontalAlignment="Center"
          VerticalAlignment="Stretch"
          Background="Black" 
          ShowsPreview="True"
          Width="5"
          />
于 2009-12-12T22:43:16.703 に答える