2011-03-10 50 views
3

我已經創建稱爲MovableItemsControl自定義控制,自ItemsControl繼承數據,以便覆蓋GetContainerForItemOverride()方法。我的問題是綁定集合中沒有任何對象正在顯示。目前,我綁定了一個OberservableCollection字符串,當我查看調試器時,我可以看到它們在ItemsSource中。WPF自定義控制自ItemsControl衍生未能顯示結合

定製控制如下:

public class MovableItemsControl : ItemsControl 
{ 
    static MovableItemsControl() 
    {   
     DefaultStyleKeyProperty.OverrideMetadata(typeof(MovableItemsControl), new FrameworkPropertyMetadata(typeof(MovableItemsControl))); 
    } 

    /// <summary> 
    /// Wraps each content object added to the ItemsControl in a NodeWrapper 
    /// </summary> 
    protected override DependencyObject GetContainerForItemOverride() 
    { 
     NodeWrapper nodeWrapper = new NodeWrapper();    
     return nodeWrapper; 
    } 

    protected override bool IsItemItsOwnContainerOverride(object item) 
    { 
     return item is NodeWrapper; 
    } 
} 

NodeWrapper是由從Thumb(MoveThumb)衍生的一個自定義的控制和一個標籤(標籤僅僅是用於測試)的一個用戶控件。

<Style TargetType="{x:Type local:MovableItemsControl}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:MovableItemsControl}"> 
       <Border Background="{TemplateBinding Background}" 
         BorderBrush="{TemplateBinding BorderBrush}" 
         BorderThickness="{TemplateBinding BorderThickness}"> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

回答

5

有您創建了MoveableItemsControl默認樣式與包含控制項目的Generic.xaml文件的ControlTemplate?如果沒有,控件在加載時沒有任何內容。

UPDATE
的爲的ControlTemplate一個ItemsControl需要包含ItemsPresenter作爲項的佔位符被注入(類似於ContentPresenter爲ContentControl中)。您當前的模板只有一個空白邊框。

+0

我已經創建了一個默認的樣式。我已經編輯它到我的問題: – Vish

+0

這節省了我,非常感謝! – Gope

2

我認爲你是你的風格控件模板邊框內缺少任一:
一)的ItemPresenter(如<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>)OR
b)用IsItemsHost一個潘內爾設置爲true(如<StackPanel IsItemsHost="True"/>