我使用CompositeCollection
主辦我想在ItemsControl
控件來顯示對象的ItemsControl,我用this解決方案使用不同的DataTemplates爲不同的對象來實現,但是我想申請每種類型的在我的收藏中有不同的風格。我怎樣才能做到這一點?應用不同的風格
這是我的代碼:
<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
,但它只支持一種樣式,而不支持多種樣式。
謝謝!
難道它是一個綁定問題而不是樣式問題?檢查你的調試輸出窗口。 –
不要這樣想,因爲我的寬度/高度綁定正確。我認爲DataTemplate.Resources中的樣式不可訪問。代碼僅查看ItemsControl.ItemContainerStyle代碼... –