Обычно все мои WPF-диалоги - это ContentControl, которые отображаются во всплывающем окне.
Мой код обычно выглядит так:
<Grid Name="RootPanel">
<!-- Other Content -->
<!-- Popup is always last so it gets displayed on top of other contnet -->
<local:PopupPanel
local:PopupPanel.PopupParent="{Binding ElementName=RootPanel}"
local:PopupPanel.IsPopupVisible="{Binding IsPopupVisible}"
local:PopupPanel.PopupEnterKeyCommand="{Binding SaveCommand}"
local:PopupPanel.PopupEscapeKeyCommand="{Binding CancelCommand}">
<DockPanel>
<!-- Header -->
<Label DockPanel.Dock="Top" Content="{Binding PopupHeader}" />
<!-- Buttons -->
<StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Center">
<Button Content="Save" Command="{Binding PopupSaveCommand}" />
<Button Content="Cancel" Command="{Binding PopupCancelCommand}" />
</StackPanel>
<!-- Actual content displayed is determined by DataTemplates -->
<ContentControl Content="{Binding PopupContent}" />
</DockPanel>
</local:PopupPanel>
</Grid>
Я удалил множество стилей, чтобы сделать это прощечитать, но вы можете увидеть общее представление о том, как это все вместе.Моя ViewModel обычно содержит свойства для IsPopupVisible
, PopupContent
и PopupHeader
и команды для PopupSaveCommand
и PopupCancelCommand
Я использую мое собственное всплывающее окно в большинстве случаев, хотя то же самое можно сделать с помощью всплывающего окна WPF.