WPF cómo crear elementos de pestaña

El número de elementos de la pestaña no está predeterminado. Solo quiero crear nuevos elementos de pestaña y luego agregar nuevos rectangularjs dentro de los elementos actuales. Estoy generando nuevos elementos de pestaña (debajo de código) pero ¿cómo puedo agregar rectangularjs en la pestaña actual?

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

Aquí hay un enfoque que podría tomar:

  • Agregue una Grid (u otro contenedor) a cada elemento de TabItem al crearlos
  • Cree un Rectangle con el pincel / dimensiones que desee
  • Llame a tabControl1.SelectedContent , tabControl1.SelectedContent a Grid (o su tipo de contenedor)
  • Call grid.Children.Add(rectangle)

Aquí hay un ejemplo completo de código (usando un copioso código subyacente).

MainWindow.xaml:

       

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 Floors { get { return new List() { 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); } } 

Deberías echarle un vistazo a este artículo de Josh Smith:

Patterns – Aplicaciones WPF con el patrón de diseño Model-View-ViewModel

Este es uno de los mejores artículos que explican la implementación de MVVM, la aplicación de ejemplo desarrollada crea tabs en tiempo de ejecución y utiliza plantillas para mostrar el contenido interno. Si puedes ir de la misma manera tendrás una aplicación muy estable y expandible.

Nota : Descarga de código disponible desde la Galería de códigos de MSDN

Si esto es simplemente agregar un poco de control, o dibujar algo en la pestaña, ya que no está muy claro desde la publicación, personalmente, recomiendo encarecidamente que defina una Plantilla de TabItem en XAML , ya que le ahorrará mucho tiempo de “arreglos de dibujo” . Si tienes una licuadora , será mucho más fácil.

EDITAR

Si necesita alguna muestra con enlace y lo que sea, no tenga en mis manos el código, pero puede proporcionarle un enlace al proyecto de código abierto. Mira cómo se manejan los TabItems allí.

SvnRadar

Saludos.