0

所以我有以下 XAML 代码:

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

这个想法是让 BusyIndi​​cator 覆盖第一行中的两个单元格并保持第二行不变。但是 Visual Studio 中的 XAML 编辑器强调<Canvas>并说:“属性‘内容’被设置了不止一次。”

如何克服这一点?

4

1 回答 1

3

您收到有关“内容”设置不止一次的错误,因为 aBusyIndicator是 aContentControl并且最多只能有一个孩子。

您可以做的是将 BusyIndi​​cator 作为和的兄弟放在网格StackPanelCanvas。要确保它在忙碌时显示在顶行的其他控件之上,请使用属性Canvas.ZIndex。这需要比堆栈面板和画布中的任何控件具有更高的 Z-index。(如果您没有在堆栈面板和画布中使用 Z 索引,可以使用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>
于 2012-06-04T09:39:12.890 回答