【发布时间】:2011-04-02 06:40:56
【问题描述】:
如何在 C#/WPF 中实现一个可以打开/关闭新选项卡的应用程序?我在想我将不得不创建一个“模板”用户控件并以编程方式创建控件的新实例(选项卡项)并将其添加到选项卡控件中?
我是 C#/WPF 的新手,我该如何开始呢?
另一件事是当我没有 ID 时如何修改或访问子控件。
【问题讨论】:
如何在 C#/WPF 中实现一个可以打开/关闭新选项卡的应用程序?我在想我将不得不创建一个“模板”用户控件并以编程方式创建控件的新实例(选项卡项)并将其添加到选项卡控件中?
我是 C#/WPF 的新手,我该如何开始呢?
另一件事是当我没有 ID 时如何修改或访问子控件。
【问题讨论】:
这是我使用的代码。
private void addtabbutton_Click(object sender, RoutedEventArgs e)
{
// We use tabItem1 and codebox as template<typename T> for the new objects.
var tabitem = new System.Windows.Controls.TabItem();
tabitem.ContextMenu = tabItem1.ContextMenu;
tabitem.ContextMenuClosing += tabItem1_ContextMenuClosing;
tabitem.ContextMenuOpening += tabItem1_ContextMenuOpening;
tabitem.Header = "Code" + NewTabItemIndex.ToString();
tabitem.Height = tabItem1.Height;
tabitem.Width = tabItem1.Width;
tabitem.HorizontalAlignment = tabItem1.HorizontalAlignment;
tabitem.VerticalAlignment = tabItem1.VerticalAlignment;
tabitem.DataContext = tabItem1.DataContext;
var textbox = new System.Windows.Controls.TextBox();
tabitem.Content = textbox;
textbox.DataContext = codebox.DataContext;
textbox.LayoutTransform = codebox.LayoutTransform;
textbox.AcceptsReturn = true;
textbox.AcceptsTab = true;
textbox.Height = this.codebox.Height;
textbox.HorizontalAlignment = codebox.HorizontalAlignment;
textbox.VerticalAlignment = codebox.VerticalAlignment;
NewTabItemIndex++;
this.tabControl1.Items.Add(tabitem);
}
您可以看到我从框中的一个选项卡项 tabItem1 开始。然后我基本上将它的特征复制到一个新的 TabItem 中。然后我将该 TabItem 添加到我的 TabControl 中。
【讨论】:
您可以使用 ObservableCollections 轻松做到这一点。
xml
<TabControl ItemsSource="{Binding EmpList }">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding FirstName }"></TextBlock>
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
假设您正在使用 MVVM 的代码
在你的 ViewModel 中创建一个 EmpList Observablecollection
因此,当您在 Observablecollection 中添加新对象时,选项卡控件会侦听更改并为您添加新选项卡。
【讨论】: