协助我在xaml中定义UI

这是我将tabitem动态添加到tabcontrol的代码:

TabItem newTab = new TabItem(); newTab.Header = ncn.courseName; newTab.FontSize = 20; TextBox textbox = new TextBox(); textbox.HorizontalAlignment = HorizontalAlignment.Stretch; textbox.VerticalAlignment = VerticalAlignment.Stretch; textbox.FontSize = 12; textbox.AcceptsReturn = true; newTab.Content = textbox; this.Courses.Items.Add(newTab); this.Courses.SelectedItem = newTab; 

我认为可能有更好的方法(即在xaml中定义UI)。 我是WPF的新手,无法弄清楚模板的工作原理。 所以请帮帮我!

注意:tabcontrol在开头是空的(没有显示,没有tabitem,没有文本框)! 我只想在单击“添加”按钮时添加新选项卡。


有人帮助我并弄清楚了。

第一件事是:在所有情况下99%都是最好的,并且可以在XAML中为您编写UI。

其次,你应该告诉自己,WPF指示什么以及如何使用MVVM 。 如果你不这样做,你应该留在Windows Forms!

所以现在:

你的ViewModel:

 using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using PB.Base; namespace DynTabItems { public class MainWindowViewModel { public MainWindowViewModel() { AddItemCommand = new DelegateCommand(AddItem, CanAddItem); RemoveItemCommand = new DelegateCommand(RemoveItem, CanRemoveItem); } public DelegateCommand AddItemCommand { private set; get; } public DelegateCommand RemoveItemCommand { private set; get; } ObservableCollection _yourBehaviorClass = new ObservableCollection(); MyModel _selectetItem; public MyModel SelectetItem { get { return _selectetItem; } set { _selectetItem = value; } } public ObservableCollection YourBehaviorClass { get { return _yourBehaviorClass; } set { _yourBehaviorClass = value; } } private void AddItem(object obj) { YourBehaviorClass.Add(new MyModel()); } private bool CanRemoveItem(object obj) { return SelectetItem != null; } private bool CanAddItem(object obj) { return true; } private void RemoveItem(object obj) { YourBehaviorClass.Remove(SelectetItem); } } } 

现在您的XAML代码:

            

最后但并非最不重要的MyModel:

 using PB.Base; using PB.Interfaces; using PB.ValidationError; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DynTabItems { public class MyModel : ViewModelBaseEx { public MyModel() { YourHeader = "You header String"; ListOfExistingErrors = new ObservableCollection>(); ListOfExistingErrors.Add(new Error() { ErrorIndicator = "YourText", ErrorText = "Your Error Text", Predicate = s => string.IsNullOrEmpty(s.YourText) }); } string _yourText; string _yourHeader; public string YourHeader { get { return _yourHeader; } set { _yourHeader = value; SendPropertyChanged(() => YourHeader); } } public string YourText { get { return _yourText; } set { _yourText = value; SendPropertyChanged(() => YourText); } } public override ObservableCollection> ListOfExistingErrors { get; set; } } } 

如果您需要示例项目,请与我联系。