我是WPF新手,无法从MainWindow XAML文件中获取自定义用户控件的属性值。
这里,我希望得到值“8”作为行数和列数,但在我的InitializeGrid()方法中,从不设置属性。它们总是“0”。我做错了什么?
任何参考资料也将受到赞赏。
这是我的MainWindow.xaml(相关部分):
<local:BoardView
BoardRows="8"
BoardColumns="8"
/>
这是我的BoardView.xaml:
<UniformGrid
Name="uniformGrid"
Rows="{Binding BoardRows}"
Columns="{Binding BoardColumns}"
>
</UniformGrid>
</UserControl>
这是我的BoardView.xaml.cs:
[Description("The number of rows for the board."),
Category("Common Properties")]
public int BoardRows
{
get { return (int)base.GetValue(BoardRowsProperty); }
set { base.SetValue(BoardRowsProperty, value); }
}
public static readonly DependencyProperty BoardRowsProperty =
DependencyProperty.Register("BoardRows", typeof(int), typeof(UniformGrid));
[Description("The number of columns for the board."),
Category("Common Properties")]
public int BoardColumns
{
get { return (int)base.GetValue(BoardColumnsProperty); }
set { base.SetValue(BoardColumnsProperty, value); }
}
public static readonly DependencyProperty BoardColumnsProperty =
DependencyProperty.Register("BoardColumns", typeof(int), typeof(UniformGrid));
public BoardView()
{
InitializeComponent();
DataContext = this;
InitializeGrid();
}
private void InitializeGrid()
{
int rows = BoardRows;
int cols = BoardColumns;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
uniformGrid.Children.Add( ... );
// ...
}
}
}
答案 0 :(得分:1)
您已设置此绑定:
<UserControl ...>
<UniformGrid
Name="uniformGrid"
Rows="{Binding BoardRows}"
Columns="{Binding BoardColumns}"
>
</UniformGrid>
</UserControl>
问题是您的绑定无法正常工作,因为绑定使用的默认数据源是DataContext
的{{1}}。你可能没有设置UserControl
但是没关系,因为这不是你想要的。
您希望将DataContext
中Rows
的数量绑定到UniformGrid
属性。由于BoardView.BoardRows
是前一个代码段 一个UserControl
,因此您可以为BoardView
指定一个名称并使用BoardView
语法来引用它是这样的:
ElementName
这说:“将<UserControl Name="boardView" ...>
<UniformGrid
Name="uniformGrid"
Rows="{Binding BoardRows, ElementName=boardView}"
Columns="{Binding BoardColumns, ElementName=boardView}"
>
</UniformGrid>
</UserControl>
绑定到名为UniformGrid.Row
的元素的BoardRows
属性”,正是您想要的!