我想在运行时创建一个网格。这是XAML代码来说明我所期待的:以编程方式设置ColumnDefinition和RowDefinition
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
Name='Test'>
<Grid.RowDefinitions>
<RowDefinition Height='*' />
<RowDefinition Height='*' />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width='*' />
<ColumnDefinition Width='*' />
<ColumnDefinition Width='*' />
<ColumnDefinition Width='*' />
<ColumnDefinition Width='*' />
</Grid.ColumnDefinitions>
</Grid>
的XAML上面的代码是好的,除了它是静态的,固定的。我希望应用程序在运行时根据用户输入创建列和行定义。所以,我创建了一个名为启动网格的方法:
private void initiateGrid()
{
int numberOfColumn = 10;
for (int j = 0; j < (numberOfColumn/5) + 1; j++)
{
RowDefinition r1 = new RowDefinition();
Test.RowDefinitions.Add(r1);
for (int i = 0; i < numberOfColumn; i++)
{
ColumnDefinition c1 = new ColumnDefinition();
c1.Width = new GridLength(1, GridUnitType.Star);
Test.ColumnDefinitions.Add(c1);
TextBlock tb = new TextBlock();
tb.FontSize = 20;
tb.VerticalAlignment = VerticalAlignment.Top;
tb.HorizontalAlignment = HorizontalAlignment.Stretch;
tb.Text = string.Format("Text row {0}, column {1}", j, i);
Test.Children.Add(tb);
Grid.SetColumn(Test, i);
Grid.SetRow(Test, j);
}
}
}
我在MainPage中有initializeComponent之后调用它。
public MainPage()
{
this.InitializeComponent();
initiateGrid();
}
我没有得到编译器错误,也没有运行时错误,但我没有看到我试图填充验证的位置精度的文本块。 有人可以帮我解决一些问题吗?我的代码出了什么问题?
谢谢!
属性与视图有关 - 不要将它们放入VM中。 – slugster
视图可以在代码隐藏文件中包含代码,以便将视图模型分配为其DataContext属性。这可以像视图实例化新视图模型并将其分配给其DataContext一样简单,或者使用控制反转容器将视图模型注入视图。 但是,将视图模型连接到代码隐藏文件中的视图是不鼓励的,因为它可能会给Visual Studio和Microsoft ExpressionBlend®设计软件中的设计人员带来问题。 – Monty
那个评论是对我的回复吗?我很困惑 - 你究竟想说什么?这听起来像是来自某处的引用? – slugster