我目前为网格控件提供以下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 ”。
如何在XAML中访问DevExpress Grid(嵌套在UserControl中)及其列集合?
答案 0 :(得分: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); }
}
然后在构造函数中将属性设置为内部Columns集合:
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属性的任何类型。