0

Так у меня есть следующий код XAML:Silverlight 4, XAML: Как расширить <toolkit: BusyIndicator> до нескольких столбцов сетки?

<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> 

Идея заключается в том, чтобы иметь BusyIndicator, чтобы покрыть обе ячейки в первой строке и оставить вторую строку как есть. Но редактор XAML в Visual Studio подчеркивает <Canvas> и говорит: «Свойство« Содержимое »установлено более одного раза».

Как преодолеть это?

ответ

3

Вы получаете сообщение об ошибке «Контент», установленный более одного раза, поскольку BusyIndicator - это ContentControl и может содержать не более одного ребенка.

Вместо этого вы можете использовать BusyIndicator внутри сетки в качестве родных и близких ваших StackPanel и Canvas. Чтобы убедиться, что он отображается над другими элементами управления в верхнем ряду, когда он занят, используйте свойство Canvas.ZIndex. Это должно иметь более высокий Z-индекс, чем любые элементы управления в вашей панели стека и холста. (Если вы не используете Z-индексов в вашем StackPanel и холст, 1 будет делать, как в примере ниже.)

<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

Спасибо! Я попробую этот подход. – bazzilic

+0

Это сработало, спасибо! :) – bazzilic