【问题标题】:How do I use an array from code in the xaml file? C#如何使用 xaml 文件中代码中的数组? C#
【发布时间】:2018-08-14 19:54:18
【问题描述】:

我正在使用 Blend 处理动画。
我创建了一个故事板,它将按钮的边距更改为与放置在网格上的 55 个文本框之一完全相同的位置。
动画应将按钮移动到 55 个文本框之一,具体取决于我单击的文本框
我创建了一个包含 55 个文本框的所有边距的数组,现在我想在 xaml 中使用这个数组。
我尝试使用 Resources.Add 和 StaticResource 但它不起作用。

【问题讨论】:

  • 您的布局仅包含 55 个文本框的边距?这听起来很奇怪。考虑使用适当的布局面板,例如 StackPanel 或 Grid。假设 TextBox 是堆叠的(例如垂直),您可以将它们放置在单个 ItemsControl 中,并通过在 ItemTemplate 中设置 Button 元素的 Visibility 来显示 Button。
  • 我在一个网格中有 55 个文本框,它们的放置方式就像典型的学校时间表一样。我的目标是,当我按下按钮时,它会自行移动到文本框并消失,但是要执行此动画,我需要文本框的位置,即它们的边距,如果我是正确的。对不起,我没有把问题说清楚

标签: c# arrays wpf xaml


【解决方案1】:

在 XAML 中使用数组非常简单:首先将边距数组声明为 Window 的公共属性:

public Thickness[] MyArray { get; set; }

然后在 Window 构造函数中初始化它:

MyArray = new Thickness[50];
MyArray[0] = new Thickness(5, 5, 5, 5);
MyArray[1] = new Thickness(10, 10, 10, 10);
// ...
DataContext = this;

然后将按钮的 Margin 属性绑定到数组的每个元素:

<TextBox x:Name="TextBox1" Margin="{Binding MyArray[0]}" />
<TextBox x:Name="TextBox2" Margin="{Binding MyArray[1]}" />

无论如何,使用ObservableCollection 而不是Array 是一个更好的主意,因为否则您的视图将不会从后面的代码中收到有关数组内部所做更改的通知:

public ObservableCollection<Thickness> MyCollection { get; set; }

public MainWindow()
{
    InitializeComponent();

    MyCollection = new ObservableCollection<Thickness>();
    MyCollection.Add(new Thickness(5, 5, 5, 5));
    MyCollection.Add(new Thickness(10, 10, 10, 10));
    // ...
    DataContext = this;
}

在您的 XAML 中,绑定保持不变:

<TextBox x:Name="TextBox1" Margin="{Binding MyCollection[0]}" />
<TextBox x:Name="TextBox2" Margin="{Binding MyCollection[1]}" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    相关资源
    最近更新 更多