У нас есть BaseDialogView со следующим кодом xaml:
<Window x:Class="Test.BaseDialogView"
Height="475"
WindowStartupLocation="CenterOwner"
SizeToContent="Height"
ResizeMode="CanResize"
SizeChanged="Window_SizeChanged">
<ContentControl Content="{Binding ContentPage}" />
</Window>
BaseDialogViewModel класс:
public class BaseDialogViewModel : AbstractNotifyPropertyChangedItem
{
private UserControl contentPage;
public UserControl ContentPage
{
get { return this.contentPage; }
set
{
if (this.contentPage != value)
{
this.contentPage = value;
this.RaisePropertyChanged(() => this.ContentPage);
}
}
}
}
Использование очень просто:
BaseDialog dialog = new BaseDialog();
BaseDialogViewModel dialogVm = new BaseDialogViewModel();
dialog.Owner = Application.Current.MainWindow;
dialog.DataContext = dialogVm ;
dialogVm.ContentPage = new ActivationView();
dialogVm.ContentPage.DataContext = new ActivationViewModel();
Так что в основном один разу вас есть экземпляр BaseDialog
, вы просто устанавливаете ContentControl (путем установки dialog.ContentPage
и dialog.ContentPage.DataContext
).
ActivationView очень прост.Например:
<UserControl x:Class="Test.ActivationView" d:DesignHeight="400" d:DesignWidth="700" MaxWidth="700">
<Grid> .... what ever you need
</UserControl>
Проблема в том, что установлены разные окна UserControls
, которые имеют разную ширину и высоту.Когда отображается первый UserControl, он находится в центре главного окна, что нормально.Затем отображается каждый новый userControl, но он не центрируется. Как центрировать окно BaseDialog для каждого пользовательского элемента управления?
Я пробовал это (BaseDialogView):
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
Window w = sender as Window;
this.Top = (Application.Current.MainWindow.Height - w.ActualHeight) / 2;
}
, но не работает нормально (некоторые пользовательские элементы управления все еще не работаютпо центру пикселя).Я также попытался добавить это в BaseDialogView Xaml
<Window .... VerticalAlignment="Center">
, но, похоже, он работает только для начального экземпляра.