C# WPF 如何以编程方式设置控件的位置、宽度和高度?

Posted

技术标签:

【中文标题】C# WPF 如何以编程方式设置控件的位置、宽度和高度?【英文标题】:C# WPF how to set location,width and height of the controls programmatically? 【发布时间】:2011-08-22 07:09:19 【问题描述】:

我正在做我的第一个 WPF 应用程序。我有问题,当我的表单最大化或全屏时,我的控件不会调整大小,只是停留在同一个位置。只有表单被最大化。

在 winform 中,我可以在 .cs 中进行如下调整:

panel6.Width
panel6.Height
panel6.Location

如果我的表单最大化,这将帮助我设置它。我通过使用一些算术来获得屏幕分辨率和一些计算并获得值并可以将其设置为宽度、高度和位置。 但这是在 WINFORM 中。

我将如何解决这个问题以在 WPF 中最大化和全屏?有没有办法通过 .cs 文件以编程方式完成?还是 WPF 自带一个简单的内置控件来解决这个问题?

假设我在 WPF 中使用停靠面板。

如果窗口最大化但其他控件仍然存在,那将毫无意义。

【问题讨论】:

当人们提到 WPF 中的布局元素时,值得一提的是,您也可以在 WinForms 中使用锚定和停靠来让您的生活更轻松。 【参考方案1】:

设置宽度高度

dockpanel1.width = 230;
dockpanel1.height = 230;

至于位置,wpf 使用 Margin

dockpanel1.Margin = new Thickness(0,440,836,40);

【讨论】:

这个dockpanel1.Margin = new Thickness(0,440,836,40); 看起来像是一种完全错误的 UI 设计方式。以下是一些进行适当的响应式和流畅设计的技巧:docs.microsoft.com/en-us/windows/uwp/design/layout/…【参考方案2】:

可以以编程方式在画布上移动子元素。

在 xaml 中:

<Canvas>
    <YourElement Canvas.Top="x" Canvas.Left="y"/>
</Canvas>

在 C# 中:

Canvas.SetTop(YourElement, newX);
Canvas.SetLeft(YourElement, newY);

【讨论】:

这是一种更直观的方式来简单地放置控件并移动它们。边距似乎设置了相对于其他元素的东西。它更难。【参考方案3】:

使用一些计算,例如(控件的先前位置 * 布局的新大小)/布局的先前大小 = 控件的新位置

但最简单的方法是使用 XAML 使用 Grid 并在其中放置列和行并将列和行的大小设置为 * 因此,在布局大小更改时,您的控件将重新定位,以参考父级的大小更改,您的网格是它的子级。 您甚至可以通过在列和行中设置控件的边距来拥有自动调整大小的控件。不要忘记设置为拉伸的水平和垂直对齐方式。

【讨论】:

【参考方案4】:

对于您的具体问题,建议您使用DockPanel 并将您的控件放入其中。这是第一个 bing 结果:WPF Tutorial | Dock Panel

正如flq 和blindmeis 已经建议的那样,请研究布局面板。这将使您在 WPF 中的生活变得更加简单。

【讨论】:

【参考方案5】:

您应该查看 wpf 中所有不同的布局面板(Grid、DockPanel、StackPanel、Canvas ...)

因此,如果您为 Panel 设置了任何属性,那么如果您的 LayoutPanel 发生更改,它的行为就会有所不同。

【讨论】:

【参考方案6】:

如果您想明确定位您的子项目,请使用 Canvas 面板

<Canvas>
    <YourElement Canvas.Top="x" Canvas.Left="y"/>
</Canvas>

【讨论】:

你可以..但是如果有人想动态改变位置而不是使用 XAML,没有办法做到这一点:]..

以上是关于C# WPF 如何以编程方式设置控件的位置、宽度和高度?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将控件添加到WPF表单

c# winform groupbox上动态生成的控件,如何让控件随着分辨率变化而自动调整位置和大小

c# winform groupbox上动态生成的控件,如何让控件随着分辨率变化而自动调整位置和大小

如何使用 MVVM 应用程序在 WPF 中以编程方式设置 DataGrid 的选定项?

C# WPF - 组合框

如何以编程方式将 Silverlight Grid 布局 ColumnDefinition 宽度设置为“*”?