2016-06-14 4 views
0

В приложении 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, для которых что принято отвечать не работает.

ответ

2

Поставил проблему, перейдя по ссылке в Transform.

<Path Data="{Binding PathData}" Stroke="White" StrokeThickness="3"> 
    <Path.RenderTransform> 
     <CompositeTransform TranslateX="{Binding Left}" TranslateY="{Binding Top}"/> 
    </Path.RenderTransform> 
</Path> 
Смежные вопросы