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]);
    }
}

WPF 如何创建选项卡项

以下是您可以采取的一种方法:

  • 创建每个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雷达

问候。