Ваш вопрос немного расплывчатый, поскольку в WPF ваши возможности здесь ограничены только вашим воображением.
Вот несколько вариантов: MessageBox Это самый простой вариант - если вы хотите уведомить вашего пользователя простым сообщением, которое он должен подтвердить, чтобы продолжить, то просто покажите сообщение в MessageBox .
Roll YourСобственный диалог Если MessageBox не совсем это делает, и вы хотите показать больше или разные виды информации, то вы можете просто создать новое окно и открыть его с помощью метода ShowDialog () , заставляя пользователязакройте его (подтвердите), прежде чем продолжить.
StatusBar Если вы просто хотите передать информацию, вы можете просто добавить StatusBar внизу вашего диалога.Я связался с хорошим примером от поддерживающего SO'er Kent Boogaart .Обратите внимание, что вы не ограничены только текстом в StatusBar - вы можете добавить к нему любой элемент UIElement, чтобы вы могли иметь изображения, индикаторы выполнения и т. Д.
Некоторая другая панель У вас также может быть какая-то другая панель (на вашем примере, StackPanel или что-то в верхней части вашего приложения), для которой для параметра Visibility установлено значение Collapsed, если в этом нет необходимости.Вы также можете иметь, например, границу с некоторым содержимым, которое отображается перед остальными элементами UIE в вашем диалоге.Вы можете использовать элемент управления PopUp .
Если вы идете по маршруту «дополнительная панель» (который, возможно, наиболее соответствует тому, что вы спрашиваете), тогда может быть неплохо сделать некоторыетрюки с анимацией, чтобы добавить немного флеш в ваше приложение.Такие вещи, как перемещение панели на место или анимация непрозрачности и т. Д. Если вы размещаете информацию поверх остального содержимого окна, вы также можете поиграть с непрозрачностью, чтобы сделать панель полупрозрачной - достаточно темной, чтобы ее можно было видеть и читать, но также позволяя пользователю увидеть немного окна за ним.
Вот очень простой пример того, что я имею в виду.Я оставлю это в качестве упражнения для пользователя, чтобы добавить любое форматирование, скользкую анимацию, обработать несколько сообщений и т. Д.
<Window ...>
<Grid x:Name="gridMainLayout">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel x:Name="stackNotificationArea"
Grid.Row="0"
Orientation="Horizontal"
Background="LemonChiffon"
Visibility="Collapsed">
<TextBlock x:Name="txtMessage"
Text="{Binding NotificationMessage}" />
<Button x:Name="btnAcknowledge"
Content="Acknowledge" />
</StackPanel>
<!-- Rest of your window goes here -->
<Grid x:Name="gridContent"
Grid.Row="1">
<!-- Content of window -->
</Grid>
</Window>
В приведенном выше примере я предполагаю, что есть свойство с именем NotificationMessage, которое возвращаетпоследнее уведомлениеВы можете жестко запрограммировать это в тексте, или как угодно.Вероятно, было бы лучше связать видимость StackPanel, основываясь на том, были ли какие-либо уведомления.В любом случае вам придется переключать StackPanel на Visible по мере необходимости.Установка его в Visible автоматически переместит содержимое вашего окна вниз, как вы описали.
Обязательно установите Visibility в Collapsed, когда сообщение будет подтверждено.Если вы установите значение Hidden, StackPanel не будет отображаться, но недвижимость все равно будет удерживаться (т.е. в верхней части вашего приложения будет пустое место).
Конечно, выможет быть настолько причудливым, насколько вам нужно быть здесь - у вас может быть небольшой список со всеми сообщениями, или пара кнопок для прокрутки сообщений, или кнопка для запуска окна со всеми сообщениями, или ...