Самый простой способ сделать это - поместить содержимое в элемент управления Grid, например
<Grid>
<StackPanel>
<-- Some items -->
</StackPanel>
<Grid x:Name="Overlay" Visibility="Collapsed">
<Grid.Background>
<SolidColorBrush Color="Black" Opacity=".5"/>
</Grid.Background>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Text="This is an overlay!"/>
</StackPanel>
</Grid>
</Grid>
Это работает, потому что "внутренняя" сетка заполнит всю область "внешней" сетки. Затем вы можете изменить видимость наложения, изменив его видимость. Вы можете сделать это либо в коде:
Overlay.Visibility = Visibility.Visible;
Или в xaml, используя ValueConverter
, как в в этом сообщении