标签项的数量未预先确定。我只想创建新的标签项,然后在当前项目中添加新的矩形。 我正在生成新的标签项(下面是代码)但是如何在当前标签中添加矩形?
var _FloorName = (from fn in db.floors select fn.floorname).ToList();
if (_FloorName.Count > 0)
{
for (int i = 0; i < _FloorName.Count; i++)
{
tabControl1.Items.Add(_FloorName[i]);
}
}
答案 0 :(得分:3)
您可以采取以下一种方法:
TabItem
添加Grid
(或其他容器)
Rectangle
tabControl1.SelectedContent
,将其投放到Grid
(或您的容器类型)grid.Children.Add(rectangle)
这是一个完整的代码示例(使用大量代码隐藏)。
MainWindow.xaml:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel Margin="12">
<TabControl Name="tabControl1" Height="250" />
<Button Content="Add Rectangle" Click="Button_Click"
Width="90" Height="25" Margin="5" />
</StackPanel>
</Window>
MainWindow.xaml.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
public class Floor
{
public Floor(string name = null)
{
this.Name = name;
}
public string Name { get; set; }
}
public class FakeDb
{
public IEnumerable<Floor> Floors
{
get
{
return new List<Floor>()
{
new Floor("floor1"),
new Floor("floor2"),
new Floor("floor3"),
};
}
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
InitializeTabControl();
}
private void InitializeTabControl()
{
var db = new FakeDb();
var floorNames = (from fn in db.Floors select fn.Name).ToList();
foreach (string floorName in floorNames)
{
var item = new TabItem()
{
Header = floorName,
Content = new Grid(),
};
tabControl1.Items.Add(item);
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var random = new Random();
var rectangle = new Rectangle()
{
Stroke = Brushes.Black,
Fill = Brushes.SkyBlue,
Width = 50,
Height = 75,
Margin = new Thickness(
left: random.NextDouble() * 300,
top: random.NextDouble() * 150,
right: 0,
bottom: 0),
HorizontalAlignment = HorizontalAlignment.Left,
VerticalAlignment = VerticalAlignment.Top,
};
var grid = (Grid)tabControl1.SelectedContent;
grid.Children.Add(rectangle);
}
}
答案 1 :(得分:3)
你应该看一下约什史密斯的这篇文章 -
Patterns - WPF Apps With The Model-View-ViewModel Design Pattern
这是解释MVVM实现的最佳文章之一,开发的示例应用程序在运行时创建选项卡,并使用模板显示内部内容。如果你可以采用相同的方式,那么你将拥有一个非常稳定和可扩展的应用程序。
注意:可从MSDN Code Gallery
下载代码答案 2 :(得分:2)
如果这只是添加一些控件,或在Tab上绘制一些东西,因为它不是很清楚,我个人强烈建议定义 TabItem的模板 在 XAML 中,因为它会为您节省很多“绘图修正”时间。如果你有一个 Blender ,它将变得更加容易。
编辑
如果你需要一些带有绑定的样本,那么现在我手上没有代码,但是可以为你提供一个开源项目的链接。看看TabItems是如何在那里管理的。
问候。