0

J'ai donc un code XAML suivant:Silverlight 4, XAML: Comment étendre <toolkit: BusyIndicator> à plusieurs colonnes de la grille?

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="214" /> 
     <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="42" /> 
    </Grid.RowDefinitions> 

    <toolkit:BusyIndicator IsBusy="False" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> 
     <StackPanel Grid.Column="0" Grid.Row="0"> 
      <!-- ... --> 
     </StackPanel> 
     <Canvas Grid.Column="1" Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
      <!-- ... --> 
     </Canvas> 
    </toolkit:BusyIndicator> 
    <TextBlock Grid.Row="1" Grid.ColumnSpan="2" /> 
</Grid> 

L'idée est d'avoir BusyIndicator pour couvrir les deux cellules dans la première rangée et laisser la deuxième rangée comme il est. Mais l'éditeur XAML dans Visual Studio souligne <Canvas> et dit: "La propriété" Contenu "est définie plusieurs fois."

Comment surmonter cela?

Répondre

3

Vous obtenez l'erreur sur 'Content' étant défini plusieurs fois car BusyIndicator est un ContentControl et ne peut avoir qu'un enfant au maximum. Ce que vous pouvez faire à la place est de mettre le BusyIndicator dans la grille en tant que frère de votre StackPanel et de Canvas. Pour s'assurer qu'il apparaît au-dessus des autres contrôles de la ligne supérieure lorsqu'il est occupé, utilisez la propriété Canvas.ZIndex. Cela doit avoir un index Z plus élevé que tous les contrôles de votre stackpanel et canvas. (Si vous n'utilisez pas d'index Z dans votre stackpanel et canvas, 1 fera l'affaire, comme dans l'exemple ci-dessous.)

<Grid> 
    <!-- ... --> 
    <toolkit:BusyIndicator IsBusy="False" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="0" Canvas.ZIndex="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/ > 
    <StackPanel Grid.Column="0" Grid.Row="0"> 
     <!-- ... --> 
    </StackPanel> 
    <Canvas Grid.Column="1" Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
     <!-- ... --> 
    </Canvas> 
    <TextBlock Grid.Row="1" Grid.ColumnSpan="2" /> 
</Grid> 
+0

Merci! Je vais essayer cette approche. – bazzilic

+0

Ça a marché, merci! :) – bazzilic

Questions connexes