我在窗口上有一组按钮。当我点击那些按钮时,我想动态添加不同的控件。 考虑我有两个按钮 1 GT; AddTextBox 2 - ; Add按钮
当我点击AddTextButton时,应该将TextBox添加到窗口中 当我点击AddButton时,应该添加Button
答案 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 answer的H.B.引导我解决问题。