Я действительно ненавижу всплывающее окно WPF по умолчанию, поэтому обычно использую свое собственное.Код для этого можно найти здесь
Размер содержимого всплывающего окна по умолчанию основан на размере содержимого внутри всплывающего окна.Вот пример того, как его можно использовать:
<local:PopupPanel
local:PopupPanel.PopupParent="{Binding ElementName=PopupParentPanel}"
local:PopupPanel.IsPopupVisible="{Binding IsPopupVisible}">
<DockPanel>
<Label DockPanel.Dock="Top" Background="Silver" Content="Popup Header" />
<Button DockPanel.Dock="Bottom" Content="Save" />
<local:MyUserControl DataContext="{Binding }" />
</DockPanel>
</local:PopupPanel>