簡體   English   中英

如何在運行時將wpf控件添加到特定網格行和單元格?

[英]How to add wpf control to particular grid row and cell during runtime?

我的WPF“窗口”中有以下網格(是類窗口);

<Grid Name="RequiredGrid">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="70" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
        </Grid>

根據傳遞到窗口的內容,我想一次一行地將項添加到此網格中。 也就是說,我想在左列中添加一個Label,在右列中添加一個TextBox。 我相信我知道如何通過在后面的代碼中執行以下操作來添加新行來保存新數據:

RequiredGrid.RowDefinitions.Add(new RowDefinition());

問題是,在我創建了Label和TextBox之后。

Label AttrLabel = new Label();
TextBox AttrTextBox = new TextBox();

我真的不知道怎么把它放到窗口中以便顯示出來。 我見過一些帖子說,做這樣的事情:

this.Controls.Add(AttrLabel);
this.Controls.Add(AttrTextBox);

這有兩個問題。 1)我的Window類沒有這個“Controls”屬性或其他什么。 2)這無助於我指定每個UI項的行和列。

現在在XAML中,我很容易用這樣的東西指定行和列:

 <Label Grid.Column="0" Grid.Row="0"/>

這雖然擊敗了我的意圖的“動態性”。 有誰知道如何讓我的動態創建的UI元素顯示在我的窗口中,並指定它將在網格中顯示的行和列。

Grid.Row和Grid.Column屬性是附加屬性 ,因此不像普通的.net屬性那樣設置。 從代碼中設置它們的正確方法是:

Grid.SetRow(someLabel, 0);
Grid.SetColumn(someLabel, 0);

您應該能夠在將它們添加到Grid對象的Children集合之前或之后執行此操作,但在添加控件之前設置它們應該可以防止任何可能的閃爍。

  • 像你一樣創建網格( <yourGrid> )和行定義。
  • 創建控件( <yourcontrol> )。 然后為網格設置ColumnSpan和Row:

    Grid.SetColumnSpan(<yourControl>, 3); Grid.SetRow(<yourControl>, 0);

  • 然后將控件添加到您創建的網格中

    <yourGrid>.Children.Add(<yourControl>);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM