Wpf 如何访问XAML中的嵌套属性?

Wpf 如何访问XAML中的嵌套属性?,wpf,xaml,devexpress,Wpf,Xaml,Devexpress,目前,我的网格控件具有以下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"

目前,我的网格控件具有以下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>

我想将网格移动到UserControl,如下所示:

<UserControl>
   <Grid>
      <dxg:GridControl x:Name="DXGrid"/>
   </Grid>
</UserControl>

最后,我希望实现以下目标:

<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>

但问题是,我得到了一个错误,指出“在MyUserControl类型中未找到附加的属性DXGrid


如何访问DevExpress网格(嵌套在UserControl中)及其XAML中的列集合?

简短回答-您不能。至少不是直接的

但是,解决这个问题的一种方法是在MyUserControl上放置一个pass-through属性,该属性只将其信息传递给嵌套控件。所以它看起来像:

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属性的任何类型即可。

Woww,这看起来是一种更简单的方法!谢谢你,菲尔!我收到了MSFT的回复,他们把问题弄得比你的复杂。我会试试你的方法:)这里是链接到MSFT的答案: