ItemsControl
コントロールに表示するオブジェクトをホストするのにCompositeCollection
を使用していますが、別のオブジェクトに異なるDataTemplatesを使用して実装するためにthisソリューションを使用しましたが、それぞれのタイプ私のコレクションには別のスタイルがあります。これどうやってするの?ItemsControlと異なるスタイルを適用する
これは私のコードである:
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type mapNamespace:MapObject}">
<DataTemplate.Resources>
<Style TargetType="{x:Type ContentPresenter}">
<Setter Property="Canvas.Left" Value="{Binding MapObjLocation.X}" />
<Setter Property="Canvas.Top" Value="{Binding MapObjLocation.Y}" />
</Style>
</DataTemplate.Resources>
<Rectangle Fill="#00000000" Height="10" Width="10" Stroke="Red">
<Rectangle.ToolTip>
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<TextBlock Text="X: "/>
<TextBlock Text="{Binding MapObjLocation.X}" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Y: " />
<TextBlock Text="{Binding MapObjLocation.Y}" />
</StackPanel>
</StackPanel>
</Rectangle.ToolTip>
</Rectangle>
</DataTemplate>
<DataTemplate DataType="{x:Type viewModel:ReferenceMapRectangle}">
<DataTemplate.Resources>
<Style TargetType="{x:Type ContentPresenter}">
<Setter Property="Canvas.Left" Value="{Binding X}" />
<Setter Property="Canvas.Top" Value="{Binding Y}" />
</Style>
</DataTemplate.Resources>
<Rectangle Height="{Binding Height, Mode=TwoWay}" Width="{Binding Width, Mode=TwoWay}" Stroke="White" StrokeThickness="6"
Canvas.Top="{Binding Y, Mode=TwoWay}" Canvas.Left="{Binding X, Mode=TwoWay}" >
</Rectangle>
</DataTemplate>
</ItemsControl.Resources>
これを実行した実際の結果は、MapObjectsにはCanvas
上の正しい位置に表示されますが、ReferenceMapRectangle
オブジェクトは(0,0)に固定されたままであろうということですキャンバスでは決して動かないでしょう(幅/高さは更新されます)
これがどうして起こるのか誰かが知っていますか? ItemsControl.ItemContainerStyle
を使ってみましたが、複数のスタイルではなく1つのスタイルしかサポートしていません。
ありがとうございます!
スタイルの問題ではなくバインディングの問題になりますか?デバッグ出力ウィンドウを確認してください。 –
私の幅/高さが正しくバインドされているとは思わないでください。私は、DataTemplate.Resourcesのスタイルにアクセスできないと思います。コードはItemsControl.ItemContainerStyleコードのみを参照しています... –