我正在使用項目控件的ItemsPanel設置爲畫布(請參閱this問題獲取更多背景信息)。 ItemsControl的正在執行,因爲我想,並把它變成ItemsControl.Items手動添加一個子元素時,它就像一個魅力:當使用ItemsControl ItemsControl.ItemsPanel設置爲畫布時,ContenPresenter進入並破壞我的畫布屬性的子項[WPF]
<ItemsControl>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.Items>
<Button Canvas.Left="500" Content="Button Text" />
</ItemsControl.Items>
</ItemsControl>
注意在按鈕上的Canvas.Left屬性。這就像一個魅力,而按鈕放置在ItemsControl左側500像素左右。大!
然而,當我定義的ItemsSource綁定到一個列表中,Canvas.left沒有任何效果:
<ItemsControl ItemsSource="{Binding Elements}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Canvas.Left="500" Content="Button Text" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
通過在運行時檢測應用程序,我看到一個區別。容器ContentPresenter已添加到畫布和按鈕之間..
如何在ContentPresenter本身上設置Canvas.Left屬性?還是有另一種方法來解決這個問題?
謝謝大家!
似乎很奇怪,但這對我很有用。 – bryanbcook 2011-03-31 04:41:38
您也可以綁定ItemContainerStyle中的值,並且它將使用與DataTemplate用作源的相同項目。 :-) – 2013-06-20 13:53:39
今天你是我的英雄。 謝謝。 – 2014-08-26 02:29:49