В приложении Windows 8.1 Metro я пытаюсь связать набор фигур из моей модели представления в MainPage.xaml. Каждая форма будет иметь Left
, Top
, а также PathData
, который будет RectangleGeometry
, который содержит прямоугольник, который я хочу нарисовать внутри холста в соответствующей позиции.Как связать абсолютные координаты формы/управления внутри Canvas
Это XAML:
<Grid Background="Black">
<ItemsControl ItemsSource="{Binding Shapes}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Top" Value="{Binding Top}"/>
<Setter Property="Canvas.Left" Value="{Binding Left}"/>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Path Data="{Binding PathData}" Stroke="White" StrokeThickness="3" Canvas.Left="{Binding Left}" Canvas.Top="{Binding Top}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
Контекст данных установлен и работает правильно. Я заполняю фигуры из MainViewModel, и прямоугольники появляются на экране, но проблема в том, что я не могу получить прямоугольники для размещения в точках Left
и Top
внутри Canvas
, т. Е. Они просто помещены в (0,0).
Я попытался как привязки Path
«s Canvas.Left
и Canvas.Top
(очевидный метод, который я пробовал), а также установив ItemContainerStyle
с Style
(метод я нашел из примера WPF), который должен сделать то же самое. Но ни одна из этих работ (я добавил оба метода в xaml для справки).
Итак, что я делаю неправильно и как сделать прямоугольники появляться на соответствующих позициях?
Edit: Мой вопрос такой же, как this one for WPF за исключением того, что я ориентации окна на метро/UWP, для которых что принято отвечать не работает.