WPF динамическое расположение с ItemsControl и сеткой

Я создаю форму 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).

Что происходит:

What is happening

Желаемый результат:

The desired result

Так, мой вопрос - это: как я могу достигнуть динамического размещения своих средств управления в сетке? Я предпочел бы XAML/Data Binding/MVVM-friendly решение.

Спасибо.

Я поместил заключительный код здесь: http://www.centrolutions.com/downloads/TicTacToe.zip

35
задан Glorfindel 27 July 2019 в 17:15
поделиться

1 ответ

Вы на правильном пути. Вам просто нужно создать стиль и применить его к ItemsControl.ItemContainerStyle . Затем в стиле укажите установщик для Grid.Row и Grid.Column . ItemContainerStyle будет применяться к контейнерам, созданным для каждого элемента.

28
ответ дан 27 November 2019 в 15:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: