C# 如何在窗口中重新居中UserControl
我们有BaseDialogView和下一个xaml代码:C# 如何在窗口中重新居中UserControl,c#,wpf,C#,Wpf,我们有BaseDialogView和下一个xaml代码: <Window x:Class="Test.BaseDialogView" Height="475" WindowStartupLocation="CenterOwner" SizeToContent="Height" ResizeMode="CanResize" SizeChanged="Window_SizeChanged"> <C
<Window x:Class="Test.BaseDialogView"
Height="475"
WindowStartupLocation="CenterOwner"
SizeToContent="Height"
ResizeMode="CanResize"
SizeChanged="Window_SizeChanged">
<ContentControl Content="{Binding ContentPage}" />
</Window>
用法非常简单:
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>
但无法正常工作(某些用户控件仍不以像素为中心)。我还尝试将其添加到BaseDialogView Xaml中
<Window .... VerticalAlignment="Center">
但它似乎只适用于初始实例。
首先,您应该真正考虑如何实现MVVM模式。 这将使您的生活更轻松,也不是在大小更改事件中手动将元素居中,您应该使用
Window win = new Window();
win.Content = new MyUserControl();
win.Owner = this;
win.WindowStartupLocation = WindowStartupLocation.CenterOwner;
<> P>而不是有一个窗口,你一直在改变内容,我会考虑有不同的窗口…但是,这可能会在你的具体情况下发生变化 < P>你首先应该考虑考虑如何实施MVVM模式。 这将使您的生活更轻松,也不是在大小更改事件中手动将元素居中,您应该使用
Window win = new Window();
win.Content = new MyUserControl();
win.Owner = this;
win.WindowStartupLocation = WindowStartupLocation.CenterOwner;
<> P>而不是有一个窗口,你一直在改变内容,我会考虑有不同的窗口…但是,这可能会在你的具体情况下变化< /P>你可以添加一个屏幕截图你的问题?一般注意:一个视图模型不应该包含任何视图项目。您的
BaseDialogViewModel
类包含一个类型为UserControl
的属性,它打破了MVVM模式。我同意,谢谢您,但代码是由其他人开发的。虽然模板窗口必须有一些模式
@宽带,但这对您来说是一个很好的机会来修复它并正确地执行它。你在这里遇到的部分问题是你对平台的不稳定使用。我认为您要寻找的是绑定在xaml中的依赖属性。在视图模型中执行这项工作会创建大量不必要的代码,这使得诊断变得困难。从视图模型中引用控件(UserControl、TextBlock等等)是件坏事吗。我是说我们违反了mvvm模式?视图模型必须仅引用控件值(文本块值)或操作(按钮命令)。是否可以添加问题的屏幕截图?一般说明:视图模型不应包含任何视图项。您的BaseDialogViewModel
类包含一个类型为UserControl
的属性,它打破了MVVM模式。我同意,谢谢您,但代码是由其他人开发的。虽然模板窗口必须有一些模式
@宽带,但这对您来说是一个很好的机会来修复它并正确地执行它。你在这里遇到的部分问题是你对平台的不稳定使用。我认为您要寻找的是绑定在xaml中的依赖属性。在视图模型中执行这项工作会创建大量不必要的代码,这使得诊断变得困难。从视图模型中引用控件(UserControl、TextBlock等等)是件坏事吗。我是说我们违反了mvvm模式?视图模型必须仅引用控件值(textblock值)或操作(按钮命令)
Window win = new Window();
win.Content = new MyUserControl();
win.Owner = this;
win.WindowStartupLocation = WindowStartupLocation.CenterOwner;