Я создаю форму WPF. Одно из требований - то, что это имеет секторальное расположение так, чтобы управление могло быть явно помещено в один из секторов/ячеек.
Я создал tic-tac-toe пример ниже для передачи моей проблемы:
Существует два типа и один базовый тип:
public class XMoveViewModel : MoveViewModel
{
}
public class OMoveViewModel : MoveViewModel
{
}
public class MoveViewModel
{
public int Row { get; set; }
public int Column { get; set; }
}
DataContext формы установлен на экземпляр:
public class MainViewModel : ViewModelBase
{
public MainViewModel()
{
Moves = new ObservableCollection()
{
new XMoveViewModel() { Row = 0, Column = 0 },
new OMoveViewModel() { Row = 1, Column = 0 },
new XMoveViewModel() { Row = 1, Column = 1 },
new OMoveViewModel() { Row = 0, Column = 2 },
new XMoveViewModel() { Row = 2, Column = 2}
};
}
public ObservableCollection Moves
{
get;
set;
}
}
И наконец, XAML похож на это:
То, что не было так очевидно для меня, когда я запустил, было то, что элемент ItemsControl на самом деле переносит каждый объект в контейнер, таким образом, моя Сетка. Строка и Сетка. Привязка столбца проигнорирована, так как изображения непосредственно не содержатся в сетке. Таким образом все изображения помещаются в строку по умолчанию и Столбец (0, 0).
Что происходит:
Желаемый результат:
Так, мой вопрос - это: как я могу достигнуть динамического размещения своих средств управления в сетке? Я предпочел бы XAML/Data Binding/MVVM-friendly решение.
Спасибо.
Я поместил заключительный код здесь: http://www.centrolutions.com/downloads/TicTacToe.zip
Вы на правильном пути. Вам просто нужно создать стиль
и применить его к ItemsControl.ItemContainerStyle
. Затем в стиле укажите установщик для Grid.Row
и Grid.Column
. ItemContainerStyle
будет применяться к контейнерам, созданным для каждого элемента.