2012-01-27 77 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