Windows 8.1 Metroアプリケーションでは、ビューモデルの図形のコレクションをMainPage.xamlにバインドしようとしています。それぞれの図形はLeft
,Top
、さらにPathData
となります。RectangleGeometry
には、対応する位置にキャンバス内に描画したい矩形が含まれています。キャンバス内のシェイプ/コントロールの絶対座標をバインドする方法
これは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
の位置です。 )。
IはPath
のCanvas.Left
とCanvas.Top
(私が試し明らか法)結合ならびに同じことを行うことになっているStyle
(Iは、WPFの例から求め方法)でItemContainerStyle
設定の両方を試みました。しかし、これらのどちらもうまくいきません(私は参照のためにxamlに両方のメソッドを追加しました)。
私は間違って何をしていますか、どのように矩形を対応する位置に表示させるのですか?
編集:私の質問は、私は答えは動作しません受け入れているため、Windowsのメトロ/ UWPをターゲットにしていますことを除いて this one for WPFと同じです。