WPF: Получение System.Windows.Data Ошибка при изменении строк в сетке - PullRequest
0 голосов
/ 30 января 2010

У меня есть сетка, которую мне нужно динамически изменять в количестве столбцов в зависимости от размера окна

Я нашел единственный способ заставить его работать:

FrameworkElementFactory fGrid = new FrameworkElementFactory
  (typeof(System.Windows.Controls.Primitives.UniformGrid));

fGrid.SetValue(System.Windows.Controls.Primitives.UniformGrid.ColumnsProperty, columns);
listbox.ItemsPanel = new ItemsPanelTemplate(fGrid);

В моем обработчике событий listbox_SizeChanged. К сожалению, он выдает следующие (безвредные) ошибки. Есть лучшие идеи для того, как изменить это динамически?

System.Windows.Data Ошибка: 4: невозможно найти источник для привязки со ссылкой 'RelativeSource FindAncestor, AncestorType = 'System.Windows.Controls.ItemsControl', AncestorLevel = '1'». BindingExpression: Path = HorizontalContentAlignment; DataItem = NULL; целевой элемент 'ListViewItem' (Name = ''); цель свойство 'HorizontalContentAlignment' (тип 'HorizontalAlignment')

1 Ответ

1 голос
/ 30 января 2010

Данные связывают свойство UniformGrid.Columns:

<ListBox>
  <ListBox.ItemsPanel>
    <ItemsPanelTemplate>
      <UniformGrid Rows="10" Columns="{Binding ColumnCount}" />
    </ItemsPanelTemplate>
  </ListBox.ItemsPanel>
</ListBox>

Затем обновите ColumnCount в вашем обработчике SizeChanged.

Предполагается, что вы можете определить ColumnCount в DataContext ListBox. Если это нежелательно, вы можете легко разместить число столбцов в каком-либо другом привязываемом месте, например, определив присоединенное свойство в ListBox, связав его и установив значение присоединенного свойства в обработчике SizeChanged. В любом случае, ключ заключается в том, чтобы связать свойство Columns, а не воссоздавать весь ItemsPanelTemplate в коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...