2012-01-27 37 views
1

目前,我有我的網格控件下面的XAML代碼:如何訪問XAML中的嵌套屬性?

<dxg:GridControl x:Name="DXGrid"> 
    <dxg:GridControl.Columns> 
     <dxg:Column FieldName="Field 1" Width="100"/> 
     <dxg:Column FieldName="Field 2" Width="100"/> 
     <dxg:Column FieldName="Field 3" Width="100"/> 
    </dxg:GridControl.Columns> 
<dxg:GridControl> 

我想網格移動到用戶控件這樣:

最後,想實現以下目標:

<Window> 
    <Grid> 
     <local:MyUserControl> 
     <local:MyUserControl.DXGrid.Columns> 
      <dxg:Column FieldName="Field 1" Width="100"/> 
      <dxg:Column FieldName="Field 2" Width="100"/> 
      <dxg:Column FieldName="Field 3" Width="100"/> 
     </local:MyUserControl.DXGrid.Columns> 
     </local:MyUserControl> 
    </Grid> 
</Window> 

但問題是,我得到指出「附加屬性DXGrid中未發現錯誤類型MyUserControl「。

如何訪問XAML中的DevExpress Grid(嵌套在UserControl中)及其列收藏?

回答

2

簡答 - 你不能。至少不是直接的。

但是,解決這個問題的一種方法是在MyUserControl上放置一個傳遞屬性,它將其信息傳遞給嵌套控件。因此,它看起來是這樣的:

public static readonly DependencyProperty ColumnsProperty = 
    DependencyProperty.Register("Columns", typeof(GridColumnCollection), typeof(MyUserControl)); 

public GridColumnCollection Columns 
{ 
    get { return (GridColumnCollection)GetValue(ColumnsProperty); } 
    set { SetValue(ColumnsProperty, value); } 
} 

然後在你的構造你的屬性設置爲內列集合:

public MyUserControl() 
{ 
    InitializeComponent(); 
    Columns = DXGrid.Columns; 
} 

並使用這些新屬性現在設置,你的XAML看起來像這個:

<local:MyUserControl> 
    <local:MyUserControl.Columns> 
     <dxg:Column FieldName="Field1" Width="100"/> 
     <dxg:Column FieldName="Field2" Width="100"/> 
     <dxg:Column FieldName="Field3" Width="100"/>     
    </local:MyUserControl.Columns> 
</local:MyUserControl> 

我不熟悉DevEx,所以我猜對了GridColumnCollection的名字。只需使用DXGrid上Columns屬性的任何類型即可。

+0

Woww,這看起來像一個更簡單的方法!謝謝菲爾!我收到了來自MSFT的答覆,它使它比你的更復雜。我會盡力而爲:) 以下是MSFT答案的鏈接: http://social.msdn.microsoft.com/Forums/en/wpf/thread/c4d82b11-bb80-4c44-bd76- cf5b8eb46eff – Maximus 2012-02-05 01:06:03