Comment Définir la Colonne de la Grille MaxWidth en fonction de la Fenêtre ou de la Taille de l'Écran en XAML

J'ai un 3 grille de colonne dans une fenêtre avec un GridSplitter sur la première colonne. Je veux mettre le MaxWidth de la première colonne à un tiers de la mère de la Fenêtre ou de la Page Width (ou ActualWidth) et je préfère le faire dans le code XAML, si possible.

C'est quelques exemples de XAML pour jouer avec dans XamlPad (ou similaire) qui montre ce que je suis en train de faire.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition x:Name="Column1" Width="200"/>
            <ColumnDefinition x:Name="Column2" MinWidth="50" />
            <ColumnDefinition x:Name="Column3" Width="{ Binding ElementName=Column1, Path=Width }"/>
            </Grid.ColumnDefinitions>

        <Label Grid.Column="0" Background="Green" />
        <GridSplitter Grid.Column="0" Width="5" />
        <Label Grid.Column="1" Background="Yellow" />
        <Label Grid.Column="2" Background="Red" />
    </Grid>
</Page>

Comme vous pouvez le voir, le droit de la largeur de colonne est lié à la largeur de la première colonne, de sorte que lorsque vous faites glisser la colonne de gauche en utilisant le séparateur, la colonne de droite fait la même chose 🙂
Si vous faites glisser la colonne de gauche vers la droite, finalement, il va glisser plus de la moitié de la page/fenêtre et sur le côté droit de la fenêtre, en repoussant la colonne 2 et 3.

Je veux éviter ce par la définition de la MaxWidth de la colonne 1 à un tiers de la largeur de la fenêtre (ou quelque chose comme ça). Je peux le faire dans le code derrière assez facilement, mais comment le faire dans "XAML Seulement"?

EDIT: David Schmitt suggéré d'utiliser SharedSizeGroup au lieu de liaison, ce qui est une excellente suggestion. Mon exemple de code devrait ressembler à ceci ensuite:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
        <Grid IsSharedSizeScope="True">
            <Grid.ColumnDefinitions>
                <ColumnDefinition x:Name="Column1" SharedSizeGroup="ColWidth" Width="40"/>
                <ColumnDefinition x:Name="Column2" MinWidth="50" Width="*" />
                <ColumnDefinition x:Name="Column3" SharedSizeGroup="ColWidth"/>
            </Grid.ColumnDefinitions>
            <Label Grid.Column="0" Background="Green" />
            <GridSplitter Grid.Column="0" Width="5" />
            <Label Grid.Column="1" Background="Yellow" />
            <Label Grid.Column="2" Background="Red" />
        </Grid>
</Page>

OriginalL'auteur Johan Danforth | 2008-09-17