簡體   English   中英

WPF - 在文本框旁邊動態添加按鈕

[英]WPF - Dynamically add button next to textbox

我正在動態創建Label,Textbox和一個按鈕。 我需要Button與右側的文本框顯示在同一行。

這是我正在使用的代碼:

    Label lbl = new Label()
    {
        Content = "Some Label",
        HorizontalAlignment = HorizontalAlignment.Left,
        VerticalAlignment = VerticalAlignment.Top,
        HorizontalContentAlignment = HorizontalAlignment.Center,
        VerticalContentAlignment = VerticalAlignment.Center,
        Height = 28,
    };

    TextBox tb = new TextBox()
    {
        Text = "Some Text",
        IsReadOnly = true,
    };

    Button btn = new Button()
    {
        Content = "Click Me",
        HorizontalAlignment = HorizontalAlignment.Left
        Margin = new Thickness(tb.ActualWidth),
    };

我將按鈕邊距分配給TextBox的右邊,但它仍然出現在文本框下面的下一行。

我在這做錯了什么?

您可以使用StackPanel來解決您的問題:

StackPanel spMain = new StackPanel() { Orientation = Orientation.Vertical };

Label lbl = new Label()
  {
      Content = "Some Label",
      HorizontalAlignment = HorizontalAlignment.Left,
      VerticalAlignment = VerticalAlignment.Top,
      HorizontalContentAlignment = HorizontalAlignment.Center,
      VerticalContentAlignment = VerticalAlignment.Center,
      Height = 28,
  };

StackPanel spInner = new StackPanel() { Orientation = Orientation.Horizontal };

TextBox tb = new TextBox()
{
    Text = "Some Text",
    IsReadOnly = true,
};

Button btn = new Button()
{
    Content = "Click Me",
    HorizontalAlignment = HorizontalAlignment.Left,
    Margin = new Thickness(tb.ActualWidth),
};

spInner.Children.Add(tb);
spInner.Children.Add(btn);

spMain.Children.Add(lbl);
spMain.Children.Add(spInner);

您可以查看以下鏈接以獲取更多信息:

http://msdn.microsoft.com/en-us/library/system.windows.controls.stackpanel.orientation.aspx

這取決於您放置控件的頁面內容是什么,是網格還是其他?

為什么不創建一個stackpanel,它將根據需要正確地包含您的項目。

為什么不將所有創建的控件放在StackPanel中,其Orientation設置為Horizo​​ntal。 這樣他們就會一直放在彼此旁邊。

var stPanel = new StackPanel { Orientation = Orientation.Horizontal };
var button = new Button() { ... }
stPanel.Children.Add(button);
//And so on

編輯: kmatyaszek領先於我...... :)

我認為如果你使用Button實例中的Content方法會更好

 private byte _count;
    internal void FillbtnSubCat(Grid grid)
    {
        var myDefinition = new ColumnDefinition();
        var myButton = new Button();
        var myBlock = new TextBlock()
        {
            TextAlignment = TextAlignment.Center,
            TextWrapping = TextWrapping.Wrap,
            Text = "Some Text",
            Margin = new Thickness(5, 10, 5, 10)
        };

        Grid.SetColumn(myButton, _count);
        myButton.Margin = new Thickness(5, 10, 5, 25);
        myButton.MinWidth = 30;

        myButton.Content = myBlock;

        myDefinition.Width = new GridLength(68);
        grid.ColumnDefinitions.Add(myDefinition);
        grid.Children.Add(myButton);
        _count++;
    }

XAML

 <Grid Name="Grid1" Height="100" Width="auto">

            </Grid>

暫無
暫無

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

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