[英]ItemsControl and controls attached properties
我正在嘗試在WPF中實現帶有可移動/可調整大小的部件的圖表。 我想將ItemsControl與ItemsPanel配置為“ DynamicCanvas”。 您現在只需要了解DynamicCanvas,就可以像普通畫布一樣工作-除了一個例外-它利用附加的屬性在其子級上存儲有關X,Y屬性的信息。
我的代碼:
<ItemsControl IsTabStop="False" ItemsSource="{Binding ElementName=comboBox1,Path=SelectedItem.Source.Table}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<s:TableControl Table="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemContainerStyle>
<Style>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<!--<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">-->
<c:DynamicCanvas SizeHeightToContent="True" SizeWidthToContent="True" ClipToBounds="True" SnapsToDevicePixels="True" PreviewMouseDown="Canvas_MouseDown" IsHitTestVisible="True" Background="Gray" >
</c:DynamicCanvas>
<!--</ScrollViewer>-->
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
DynamicCanvas上顯示的控件是我的自定義類型(僅在最重要的部分下方):
<ContentControl x:Class="SubiektCommerceSynchro.ViewModel.TableControl"
c:DynamicCanvas.Left="{Binding X,Mode=TwoWay}"
c:DynamicCanvas.Top="{Binding Y,Mode=TwoWay}"
Width="450" Height="300"
></ContentControl>
現在的問題和問題:
此處不起作用的部分是具有附加屬性c:DynamicCanvas.Left(Top)。 讓我們分步進行:
1)DynamicCanvas期望其直接子級具有c:DynamicCanvas.Left和c:DynamicCanvas.Top定義
2)將TableControls放入DynamicCanvas時,ItemsPanel會將它們包裝在某種容器中
3)DynamicCanvas在其直接子級上看不到任何附加屬性=>將其視為位於(0,0)處,並使其實際上無法移動。
我該如何解決這個問題?
這有幫助嗎?
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="c:DynamicCanvas.Left"
Value="{Binding X,Mode=TwoWay}"/>
<Setter Property="c:DynamicCanvas.Top"
Value="{Binding Y,Mode=TwoWay}"/>
</Style>
</ItemsControl.ItemContainerStyle>
您必須在ItemContainerStyle
修改項目包裝器的ControlTemplate
。 如果將其設置為簡單的ContentPresenter
,則項目將不會被包裹在任何東西中( DataTemplate
的內容將直接粘貼到DynamicCanvas
)。
看到這篇文章 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.