簡體   English   中英

ItemsControl和控件的附加屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM