8
votes

WPF SharedSizeGroup Gridsplitter Problème

Je souhaite utiliser une grille pour ma disposition de haut niveau. La grille aura 1 colonne et n rangées. Chaque rangée de la grille doit également contenir une grille qui doit avoir 3 colonnes et 1 rangée. Dans la deuxième colonne est un plongélateur et j'essaie d'utiliser un groupe partagée de sorte que cela modifie la taille de la première colonne sur toutes les grilles imbriquées.

Voici ce que j'ai ... et ça marche !! .. .well genre de ... Si vous cliquez sur le séparateur et redimensionnez sans laisser aller, cela fonctionne ... Mais pour une raison quelconque si vous redimensionnez quelque chose et que vous lâchez la souris puis essayez de redimensionner à l'aide d'une ligne différente, il semble "coller ". P>

Des idées? P>

<!-- Parent Grid -->
<Grid Grid.IsSharedSizeScope="True">
    <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>

    <!-- First Grid -->
    <Grid Grid.Row="0">
        <Grid.ColumnDefinitions>
            <ColumnDefinition SharedSizeGroup="A" Width="Auto"></ColumnDefinition>
            <ColumnDefinition SharedSizeGroup="B" Width="Auto"></ColumnDefinition>
            <ColumnDefinition SharedSizeGroup="C" Width="Auto"></ColumnDefinition>
        </Grid.ColumnDefinitions>

        <Label Grid.Column="0">One-Left</Label>
        <GridSplitter Grid.Column="1" Width="5" Background="DarkGray"></GridSplitter>
        <Label Grid.Column="2">One-Right</Label>
    </Grid>

    <!-- Second Grid -->
    <Grid Grid.Row="1">
        <Grid.ColumnDefinitions>
            <ColumnDefinition SharedSizeGroup="A" Width="Auto"></ColumnDefinition>
            <ColumnDefinition SharedSizeGroup="B" Width="Auto"></ColumnDefinition>
            <ColumnDefinition SharedSizeGroup="C" Width="Auto"></ColumnDefinition>
        </Grid.ColumnDefinitions>

        <Label Grid.Column="0">Two-Left</Label>
        <GridSplitter Grid.Column="1" Width="5" Background="DarkGray"></GridSplitter>
        <Label Grid.Column="2">Two-Right</Label>
    </Grid>

</Grid>


4 commentaires

J'ai également essayé cela dans VS2010 Beta 2 avec .NET 4.0 et obtenez le même problème.


Si tel est le cas, vous devez signaler ce bogue sur Microsoft Connect immédiatement. Il y a encore une chance qu'ils peuvent le réparer en 4.0 !!!


Essayez d'utiliser un gridplitter sur tous vos sous-diagrils, regardez ma réponse, espérons que cela aide


Il semble se reproduire quand il y a plus d'un placteur de grille dont les cellules de la grille font partie de la même taille.


3 Réponses :


2
votes

Je suis capable de reproduire cela et, honnêtement, cela ressemble à un bug. Pour être spécifique, si vous développez la largeur de la colonne de la ligne une, je ne peux pas réduire la largeur plus loin que cette largeur une autre ligne. Je vais essayer de jouer avec celui-ci un peu plus, mais ... pas sûr de ce qui résoudrait ça.


1 commentaires

Merci d'avoir répondu. C'est ce que j'étais un peu réfléchi. Il semble comme ça devrait fonctionner, et un peu ... mais aussi pas. Sa conduisant moi fou !!



1
votes

Essayez cette solution si cela vous convient (à Kaxaml Ça fonctionne bien).

<!-- Parent Grid -->
<Grid Grid.IsSharedSizeScope="True">

  <Grid.RowDefinitions>
    <RowDefinition></RowDefinition>
    <RowDefinition></RowDefinition>
  </Grid.RowDefinitions>

  <Grid.ColumnDefinitions>
    <ColumnDefinition SharedSizeGroup="A" Width="Auto"></ColumnDefinition>
    <ColumnDefinition Width="Auto"></ColumnDefinition>
    <ColumnDefinition SharedSizeGroup="C" Width="Auto"></ColumnDefinition>
  </Grid.ColumnDefinitions>

  <Label Grid.Column="0" Grid.Row="0">One-Left</Label>
  <Label Grid.Column="0" Grid.Row="1">Two-Left</Label>
  <GridSplitter Grid.Column="1" Grid.Row="0" Grid.RowSpan="2" Width="5" Background="DarkGray"></GridSplitter>
  <Label Grid.Column="2" Grid.Row="0">One-Right</Label>
  <Label Grid.Column="2" Grid.Row="1">Two-Right</Label>

</Grid>


0 commentaires

12
votes

republier ma réponse de MS Connect :

Vous pouvez généralement Travailler autour de cela en n'utilisant pas SharedSizegroup et liant toutes les tailles partagées à une seule propriété sur un seul objet (par exemple, votre DataContext): P>

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="350" Width="525" Title="MainWindow">

    <!-- shared sizing used only on fixed size columns therefore safe -->
    <!-- alternatively you can hardcode width of splitter column -->
    <Grid Name="masterGrid" Grid.IsSharedSizeScope="True">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*" Name="masterColumn0" />
            <ColumnDefinition Width="Auto" SharedSizeGroup="masterColumn1" />
            <ColumnDefinition Width="1*" Name="masterColumn2" />
        </Grid.ColumnDefinitions>
        <StackPanel Grid.ColumnSpan="3">
            <StackPanel.Resources>
                <DataTemplate x:Key="dt">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="{Binding Path=Width, Mode=TwoWay, ElementName=masterColumn0}" />
                            <ColumnDefinition Width="Auto" SharedSizeGroup="masterColumn1" />
                            <ColumnDefinition Width="{Binding Path=Width, Mode=TwoWay, ElementName=masterColumn2}" />
                        </Grid.ColumnDefinitions>
                        <Button Grid.Column="0" Content="{Binding Path=Width, Mode=TwoWay, ElementName=masterColumn0}" />
                        <Button Grid.Column="2" Content="{Binding Path=Width, Mode=TwoWay, ElementName=masterColumn2}" />
                    </Grid>
                </DataTemplate>
            </StackPanel.Resources>
            <ContentPresenter ContentTemplate="{StaticResource dt}" />
            <ContentPresenter ContentTemplate="{StaticResource dt}" />
        </StackPanel>
        <GridSplitter Grid.Column="1" Width="10" ResizeBehavior="PreviousAndNext" ResizeDirection="Columns" ShowsPreview="True" />
    </Grid>

</Window>


0 commentaires