Как выполнить привязку в ItemContainerStyle в WinRT?

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

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


    

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


    

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

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


    
        
            
        
    
    
        
    
    
        
            
        
    

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

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

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

24
задан Joe White 8 August 2012 в 04:01
поделиться