gpt4 book ai didi

c# - 以编程方式在 WPF 中移动 TextBlock

转载 作者:太空宇宙 更新时间:2023-11-03 21:29:23 24 4
gpt4 key购买 nike

我一直在阅读一些关于 XAML 的教程,但它对我没有帮助。我有一个空的应用程序窗口,我需要在 3 行中创建 30 个文本框。

在 win 表单上使用,我以为我会弄清楚 - 好吧,我没有。我似乎找不到如何在特定坐标上创建它们的方法。

最佳答案

您首先要在屏幕上放置一个 Canvas 控件,然后您可以使用放置在 Canvas.LeftCanvas.Top< 上的文本框来填充它 你想要的位置。

尽管如此,WPF 拥有比 WinForms 更好的布局/排列系统,并且尝试像使用 WinForms 一样使用它意味着您会错过很多让 WPF 如此出色的东西,并且您会做出一些事情对自己更加严厉。

做同样事情的 WPF 方法是使用 ItemsControl 和一组对象,每个对象都包含 UI 需要知道的用于显示目的的数据。

首先,您将创建一个类来表示每个 TextBox

public class MyClass
{
public string Text { get; set; }
public int X { get; set; }
public int Y { get; set; }
}

注意:如果您想在运行时更改属性并让 UI 自动更新,则此类应实现 INotifyPropertyChanged

然后制作一个这个类的列表,并将它绑定(bind)到一个ItemsControl

<ItemsControl ItemsSource="{Binding ListOfMyClass}" />

然后您希望将 ItemsPanelTemplate 覆盖为 Canvas(根据 X、Y 位置定位项目的最佳 WPF 面板)

<ItemsControl ItemsSource="{Binding ListOfMyClass}">
<!-- ItemsPanelTemplate -->
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>

接下来覆盖 ItemTemplate 以使用 TextBlock 绘制每个项目

<!-- ItemTemplate -->
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Text}" />
</DataTemplate>
</ItemsControl.ItemTemplate>

并添加一个 ItemContainerStyle 将 Canvas.Left 和 Canvas.Top 属性绑定(bind)到对象的 X、Y 属性

<!-- ItemContainerStyle -->
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Canvas.Left" Value="{Binding X}" />
<Setter Property="Canvas.Top" Value="{Binding Y}" />
</Style>
</ItemsControl.ItemContainerStyle>

这将获取 MyClass 对象的列表,并将它们呈现到 Canvas 内的屏幕上,每个项目都位于指定的 X、Y 坐标处。

说了这么多,你确定这就是你想要的吗? WPF 的布局面板比 WinForms 好得多,如果您不想,也不必根据 X、Y 坐标定位每个元素。

为了快速直观地介绍 WPF 的布局,我推荐这个链接:WPF Layouts - A Visual Quick Start

此外,由于听起来您是 WPF 的新手并且来自 WinForms 背景,您可能会发现相关问题的这个答案很有用:Transitioning from Windows Forms to WPF

关于c# - 以编程方式在 WPF 中移动 TextBlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25036660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com