如何通过xaml

时间:2017-09-29 10:21:37

标签: c# wpf xaml

我在窗口上有一组按钮。当我点击那些按钮时,我想动态添加不同的控件。 考虑我有两个按钮 1 GT; AddTextBox 2 - ; Add按钮

当我点击AddTextButton时,应该将TextBox添加到窗口中 当我点击AddButton时,应该添加Button

2 个答案:

答案 0 :(得分:1)

您可以添加以下代码段,

private void AddButtonClick(object sender, RoutedEventArgs e)
    {
        var rowCount = this.grid.RowDefinitions.Count;
        this.grid.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto });
        var button = new Button() { Content = "Button1", Height = 20, Width = 50 };
        Grid.SetRow(button, rowCount + 1);
        this.grid.Children.Add(button);
    }

答案 1 :(得分:0)

如果您的意思是想要通过绑定动态添加按钮,以下方法可能对您有帮助。

首先,在定义ItemTemplate的xaml中添加ItemsControl部分。

<ItemsControl ItemsSource="{Binding DynamicControlObjects}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <TextBox Text="{Binding Text}"
                     ToolTip="{Binding Tooltip}"
                     IsEnabled="{Binding IsEnabled}"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

DynamicControlObjects只是一个简单的IList<T>,其中T是一个包含您要绑定的属性的类。

例如我在这种情况下使用的是我的班级DynamicControlHelper

// ...

using Microsoft.Practices.Prism.ViewModel;

// ...

public class DynamicControlHelper : NotificationObject
{
    #region Backing Fields

    private string _text;
    private bool _isEnabled;
    private string _tooltip;

    #endregion Backing Fields

    #region Properties

    public string Text
    {
        get
        {
            return this._text;
        }

        set
        {
            if (!string.Equals(this._text, value))
            {
                this._text = value;
                this.RaisePropertyChanged(nameof(this.Text));
            }
        }
    }

    public bool IsEnabled
    {
        get
        {
            return this._isEnabled;
        }

        set
        {
            if (this._isEnabled != value)
            {
                this._isEnabled = value;
                this.RaisePropertyChanged(nameof(IsEnabled));
            }
        }
    }

    // ...

    public string Tooltip
    {
        get
        {
            return this._tooltip;
        }

        set
        {
            if (!string.Equals(this._tooltip, value))
            {
                this._tooltip = value;
                this.RaisePropertyChanged(nameof(this.Tooltip));
            }
        }
    }

    #endregion Properties
}

当我第一次需要这种方法时。来自The answerH.B.引导我解决问题。