Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在窗口中重新居中UserControl_C#_Wpf - Fatal编程技术网

C# 如何在窗口中重新居中UserControl

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

我们有BaseDialogView和下一个xaml代码:

<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;