WPF 如何创建选项卡项
本文关键字:选项 创建 何创建 WPF | 更新日期: 2023-09-27 18:02:47
选项卡项的数量不是预先确定的。我只想创建新的选项卡项,然后在当前项中添加新矩形。我正在生成新的选项卡项(下面是代码(,但是如何在当前选项卡中添加矩形?
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]);
}
}
以下是您可以采取的一种方法:
- 创建每个
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);
}
}
你应该看看Josh Smith的这篇文章——
模式 - 具有模型-视图-视图模型设计模式的 WPF 应用
这是解释 MVVM 实现的最佳文章之一,开发的示例应用程序在运行时创建选项卡并使用模板显示内部内容。如果你能走同样的方式,你将拥有一个非常稳定和可扩展的应用程序。
注意:可从 MSDN 代码库下载代码
如果这只是添加一些控件,或者在 Tab 上绘制一些内容,因为从帖子中不是很清楚,我个人强烈建议在 XAML 中定义 TabItem 模板,因为它将为您节省大量"绘图修复">时间。如果你有一个搅拌机,它会变得更容易。
编辑
如果您需要一些带有绑定之类的示例,现在我手上没有代码,但可以为您提供开源项目的链接。看看那里是如何管理选项卡项的。
Svn雷达
问候。