我想在運行時創建一個網格。這是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