Элементы управления в той же ячейке сетки отображаются задом наперед. Поэтому простой способ поместить один элемент управления поверх другого - поместить его в одну и ту же ячейку.
Вот полезный пример, который открывает панель, которая отключает все в представлении (например, пользовательский элемент управления) с сообщением о занятости, пока выполняется долго выполняемая задача (то есть, пока свойство привязки BusyMessage
не равно нулю ):
<Grid>
<local:MyUserControl DataContext="{Binding}"/>
<Grid>
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="Visibility"
Value="Visible" />
<Style.Triggers>
<DataTrigger Binding="{Binding BusyMessage}"
Value="{x:Null}">
<Setter Property="Visibility"
Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
<Border HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Background="DarkGray"
Opacity=".7" />
<Border HorizontalAlignment="Center"
VerticalAlignment="Center"
Background="White"
Padding="20"
BorderBrush="Orange"
BorderThickness="4">
<TextBlock Text="{Binding BusyMessage}" />
</Border>
</Grid>
</Grid>