WPF как создавать вкладки - PullRequest
1 голос
/ 20 июля 2011

Количество элементов табуляции не предопределено. Я просто хочу создать новые элементы вкладки, а затем добавить новые прямоугольники внутри текущих элементов. Я создаю новые элементы вкладок (ниже приведен код), но как я могу добавить прямоугольники в текущей вкладке?

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

Ответы [ 3 ]

3 голосов
/ 20 июля 2011

Вы должны взглянуть на эту статью от Джоша Смита -

Шаблоны - Приложения WPF с шаблоном проектирования Model-View-ViewModel

Это одна изВ лучших статьях, объясняющих реализацию MVVM, разработанное приложение-пример создает вкладки во время выполнения и использует шаблоны для отображения внутреннего содержимого.Если вы пойдете тем же путем, у вас будет очень стабильное и расширяемое приложение.

Примечание : загрузка кода доступна из MSDN Code Gallery

3 голосов
/ 20 июля 2011

Вот один из подходов, которые вы можете использовать:

  • Добавьте Grid (или другой контейнер) к каждому TabItem при их создании
  • Создайте 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);
    }
}
2 голосов
/ 20 июля 2011

Если это просто добавление какого-либо элемента управления или рисование чего-либо на вкладке, потому что это не очень понятно из поста, я лично настоятельно рекомендую определить Шаблон из TabItem в XAML , так как сэкономит вам много"исправлений при рисовании" времени .Если у вас есть Блендер , это станет еще проще.

РЕДАКТИРОВАТЬ

Если вам нужен образец с привязкой и все такое, неТеперь у меня есть код, но я могу предоставить вам ссылку на проект с открытым исходным кодом.Посмотрите, как там управляются TabItems.

SvnRadar

С уважением.

...