Как мне использовать массив из кода в файле xaml? C#

#c# #arrays #wpf #xaml

#c# #массивы #wpf #xaml

Вопрос:

Я работаю с анимациями, используя Blend.
Я создал раскадровку, которая изменяет поле кнопки так, чтобы оно располагалось точно в том же положении, что и одно из моих 55 текстовых полей, размещенных в сетке.
Анимация должна переместить кнопку в одно из 55 текстовых полей, в зависимости от того, в каком текстовом поле я нажимаю
Я создал массив, который состоит из всех полей из 55 текстовых полей, и теперь я хочу использовать этот массив в xaml.
Я пытался использовать ресурсы.Добавить и StaticResource, но это не работает.

Комментарии:

1. У вас есть макет из 55 текстовых полей только по их полям? Это звучит странно. Подумайте об использовании подходящих панелей компоновки, таких как StackPanel или Grid. Предполагая, что текстовые поля расположены друг за другом (например, вертикально), вы можете поместить их в один элемент управления ItemsControl и отобразить кнопку, установив видимость элемента Button в ItemTemplate.

2. У меня действительно есть 55 текстовых полей в сетке, они расположены как обычное школьное расписание. моя цель состоит в том, чтобы при нажатии кнопки он перемещался в текстовое поле и исчезал, но для выполнения этой анимации мне нужна позиция текстовых полей, то есть их полей, если я прав. Извините, я недостаточно четко сформулировал вопрос

Ответ №1:

Использование массивов в XAML довольно простое: сначала вы объявляете свой массив margins как общедоступное свойство вашего 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]}" />