Как сделать привязки в ItemContainerStyle в WinRT?

Я пытаюсь связать коллекцию с ItemsControl, с панелью Canvas как панель элементов, а также с привязкой Canvas.Left и Top каждого объекта к объектам item. В основном я пытаюсь воссоздать двухмерную привязку данных, описанную в этом сообщении в своем блоге , но на этот раз в WinRT вместо WPF.

Поскольку ItemsControl обертывает содержимое ItemTemplate в другом элементе пользовательского интерфейса (ContentPresenter, в случае с WinRT), и именно те элементы оболочки / контейнера, которые размещаются непосредственно внутри панели элементов, должны быть установлены на этих контейнерах слева и сверху; вы не можете просто установить их в DataTemplate. В WPF достаточно легко сделать это с привязками в ItemContainerStyle, например:

      

Но когда я пытаюсь сделать то же самое в проекте WinRT / XAML, я ничего не получаю. Даже ошибки привязки. Если я жестко кодирую значение, он работает; но если я использую привязку, свойство просто останется в своем значении по умолчанию (ноль), и в окне вывода не отображаются ошибки привязки.

         

Я проверил, что у ContentPresenters действительно есть правильный DataContext (т. Е. Элемент коллекции, а не сама коллекция или что-то еще напуганное), поэтому вы думаете, что эти привязки будут работать нормально. Но они даже не оцениваются. Если я помещаю плохое привязку в другое место и запускаю сборку отладки, я вижу ошибки привязки в окне вывода отладчика; но если я ссылаюсь на бессмысленное свойство внутри моего ItemContainerStyle, никаких ошибок привязки не отображаются.

Вот более полный пример, который (насколько я знаю) должен отлично работать в WPF, но это оставляет все в начале WinRT:

                  

Я попробовал несколько более экзотических вариантов Binding – в частности RelativeSource . Когда я использовал RelativeSource TemplatedParent , поведение do-nothing не изменилось. Однако, когда я использовал RelativeSource Self , я получил ошибку привязки, заявив, что свойство не существует в типе Setter ! Он воспринимает это « Self слишком буквально, там.

Я также играл с TemplateBinding , но я никогда не искал то, что должно было использоваться, и все, что я получил, было непонятным COM-ошибками (добро пожаловать в WinRT, огромный технологический шаг назад).

Как я могу (а) правильно настроить привязки (есть ли другие варианты привязки, которые я мог бы использовать, чтобы заставить его работать правильно?), Или (б) в противном случае разрешить позиционирование элементов в моем ItemsContainer произвольно на основе Canvas о привязке данных к свойствам элементов коллекции?

На сеттерах привязки не поддерживаются. Я думаю, что Silverlight получил их только в версии 5, если вообще. Для обходных путей вы можете посмотреть мою старшую статью здесь . В основном вы определяете свойство прикрепленной зависимости, которое устанавливает привязку для вас.

Применение RenderTransform, похоже, хорошо работает для меня в silverlight и winrt / metro / 8.1:

                 

Альтернативы: здесь есть другие возможности для привязки привязок через код во время создания «Элемента» перед представлением.

ItemsControl.PrepareContainerForItemOverride http://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.ui.xaml.controls.itemscontrol.preparecontainerforitemoverride.aspx

ListViewBase.ContainerContentChanging http://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.ui.xaml.controls.listviewbase.containercontentchanging.aspx

  • Разница между {Binding PropertyName} и {Binding Path = PropertyName}
  • WPF DataGrid: свойство CanContentScroll, вызывающее нечетное поведение
  • В bash, как связать функциональный ключ с командой?
  • MVVM: привязка переключателей к модели просмотра?
  • Связанное с WPF привязка данных свойств
  • Используйте «real» CultureInfo.CurrentCulture в привязке WPF, а не CultureInfo от IetfLanguageTag
  • Список vs BindingList Преимущества / Недостатки
  • ComboBox.SelectedValue не обновляется из источника привязки
  • UITableView - лучшее редактирование посредством привязки?
  • Кто-нибудь знает набор привязок C # для FFMPEG?
  • Как вы привязываете CollectionContainer к коллекции в модели представления?
  • Давайте будем гением компьютера.