AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Devexpress Wpf Tab Control

skill-devexpress-agent-skills-devexpress-wpf-tab-control · by DevExpress

Build WPF tabbed UIs with DevExpress DXTabControl — define tabs explicitly as DXTabItem children or generate them from a data collection via ItemsSource + ItemHeaderTemplate / ItemTemplate, pick one of three views (MultiLine, Scroll, Stretch) for how headers overflow, customize colors per tab (AccentColor/BorderColor), and template every region of the control (left/right control box, content head…

No reviews yet
0 installs
36 views
0.0% view→install

Install

$ agentstack add skill-devexpress-agent-skills-devexpress-wpf-tab-control

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-devexpress-agent-skills-devexpress-wpf-tab-control)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
3mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Devexpress Wpf Tab Control? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

DevExpress WPF Tab Control

DXTabControl is a tabbed navigation control: a header panel with selectable headers across the top (or side), and a content area that shows the active page. Headers can overflow into multiple lines, scroll, or shrink (one of three views); tabs can carry icons, custom colors, close buttons, and drag-drop reordering. Tabs can be defined explicitly as DXTabItem children, populated from an IList, or generated from a data collection via ItemsSource + templates.

> Window hosting: For proper visual integration (themed title bar, ContentHeader/Footer aligning with the title bar, control box buttons in the tab bar), the host window should be dx:ThemedWindow, not a plain Window. Use ThemedWindow even when you don't otherwise need its features.

This skill covers project setup (with the ThemedWindow requirement), tab definition (XAML / Items / ItemsSource), the three layout views, and appearance customization.

When to Use This Skill

Use this skill when you need to:

  • Add a tabbed page UI to a window
  • Generate tabs dynamically from a view-model collection (ItemsSource)
  • Allow users to close (AllowHide) and reorder tabs
  • Pick a view (MultiLine / Scroll / Stretch) for header overflow behavior
  • Color or theme individual tabs (AccentColor, BorderColor)
  • Add custom content to the tab bar (left/right control box, content header/footer)

Prerequisites & Installation

NuGet Packages

| Package | Provides | |---------|---------| | DevExpress.Wpf.Core | DXTabControl, DXTabItem, ThemedWindow |

dotnet add package DevExpress.Wpf.Core

A valid DevExpress license is required. All DevExpress packages in a project must share the same version.

Host Window — Use ThemedWindow, Not Window

The host window should be dx:ThemedWindow. DXTabControl integrates with ThemedWindow for:

  • Themed title bar continuous with the tab header area
  • ControlBoxLeftTemplate / ControlBoxRightTemplate rendering correctly in the title bar
  • Tab drag-out creating a properly themed pop-out window
  • Theming hooks via IThemedWindowSupport

Convert the main window:

And in MainWindow.xaml.cs:

using DevExpress.Xpf.Core;

public partial class MainWindow : ThemedWindow {
    public MainWindow() { InitializeComponent(); }
}

> A plain Window will work (the tabs render, the control responds to input), but you'll get visual artifacts like a double title bar, mismatched colors between the title bar and the tab strip, and broken hit-testing for ControlBoxLeft/RightTemplate. Always use ThemedWindow when hosting DXTabControl.

XAML Namespaces

xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"

| Prefix | Use for | |---|---| | dx: | ThemedWindow, DXTabControl, DXTabItem, TabControlMultiLineView, TabControlScrollView, TabControlStretchView, DXImage |

Three Ways to Define Tabs — Picker

| Approach | When to use | |---|---| | Explicit DXTabItem children in XAML | Tabs are static and few; content is XAML-authored markup | | Add to Items in code | Same as above but built programmatically | | ItemsSource + templates | Tabs come from a view-model collection (MDI document workspace, master-list editor); ItemHeaderTemplate defines the header, ItemTemplate defines the content |

See [defining-tabs.md](references/defining-tabs.md) for the full picker and examples.

Three Views — Header Overflow Behavior

| View | When tabs don't fit | Set via | |---|---|---| | TabControlMultiLineView | Wrap into multiple lines | ` | | **TabControlScrollView** | Show left/right scroll buttons; horizontal or vertical orientation | | | **TabControlStretchView** | Shrink tab widths; supports pinning + drag-drop | ` |


    
        
    
    ...

Full details in [views.md](references/views.md).

Before You Start — Ask the Developer

  1. Static or dynamic tabs? Static set in XAML; dynamic from a view-model — pick ItemsSource + templates.
  2. How many tabs are expected? Many tabs (10+) → Scroll or Stretch view; a few → MultiLine or default.
  3. Should tabs be closable / draggable / pinned? Stretch view supports drag-drop + pin; close button via DXTabItem.AllowHide.
  4. Tab caching: should content be loaded once and kept alive when switching? See TabContentCacheMode.
  5. Visual customization: per-tab colors? Custom areas around the tab strip (left/right control box, content header/footer)? See [appearance.md](references/appearance.md).

Documentation & Navigation Guide

Getting Started

Refer to [references/getting-started.md](references/getting-started.md)

When you need to:

  • Install the NuGet package
  • Convert the window to ThemedWindow
  • Place a first DXTabControl with two tabs

Defining Tabs — XAML, Items, ItemsSource

Refer to [references/defining-tabs.md](references/defining-tabs.md)

When you need to:

  • Pick between explicit DXTabItem children and ItemsSource + templates
  • Bind tabs to a view-model collection
  • Add icons / close buttons / per-tab content templates
  • Control caching (TabContentCacheMode)

Views — MultiLine, Scroll, Stretch

Refer to [references/views.md](references/views.md)

When you need to:

  • Pick a view based on how tabs should overflow
  • Configure header location (top / bottom / left / right)
  • Enable scroll buttons, mouse-wheel scrolling, animation
  • Enable drag-drop / pinning (Stretch only)

Appearance Customization

Refer to [references/appearance.md](references/appearance.md)

When you need to:

  • Color individual tabs (AccentColor, BorderColor)
  • Theme tabs without overriding theme resources (NormalBackgroundTemplate, HoverBackgroundTemplate, ...)
  • Add content to the left/right of the tab strip (ControlBoxLeftTemplate, ControlBoxRightTemplate)
  • Add header/footer rows around the content area (ContentHeaderTemplate, ContentFooterTemplate)

Quick Start

Static Tabs


    
        
            
        
        
            
        
        
            
        
    

Dynamic Tabs from a Data Collection


    
        
            
        
    
    
        
            
        
    
public class MainViewModel {
    public ObservableCollection Documents { get; } = new() {
        new DocumentViewModel { Title = "Invoice 1001" },
        new DocumentViewModel { Title = "Invoice 1002" }
    };
}

Key API Surface

DXTabControl Members

| Member | Use | |---|---| | Items | Collection of DXTabItem (or auto-generated when using ItemsSource) | | ItemsSource | Bind to a data collection — tabs are generated from items | | ItemHeaderTemplate | Template for each tab's header when using ItemsSource | | ItemTemplate | Template for each tab's content when using ItemsSource | | View | Layout / behavior — TabControlMultiLineView, TabControlScrollView, TabControlStretchView | | SelectedIndex / SelectedItem | Active tab | | TabContentCacheMode | Default (no cache), CacheAllTabs, CacheTabsOnSelecting | | ControlBoxLeftTemplate / ControlBoxRightTemplate | Custom content at the left / right of the tab strip | | ContentHeaderTemplate / ContentFooterTemplate | Custom content above / below the page area | | ControlBoxPanelTemplate | Custom elements inside the tab panel | | SelectionChanging (event) | Cancel-able event fired before selection changes | | SelectionChanged (event) | Fired after selection changes |

DXTabItem Members

| Member | Use | |---|---| | Header | Header text (or arbitrary object — use HeaderTemplate to template it) | | HeaderTemplate | Template for the header content | | Content | Page content | | ContentTemplate | Template for the content | | Glyph / GlyphTemplate | Icon shown in the header | | AllowHide | Show the close (×) button on the tab | | IsHidden | Programmatically hide a tab | | HeaderMenuContent | Content for the header dropdown menu entry | | AccentColor | Background/foreground tint for this tab | | BorderColor | Border color for this tab | | NormalBackgroundTemplate / HoverBackgroundTemplate / SelectedBackgroundTemplate / FocusedBackgroundTemplate | Per-state custom theming |

Views

| View | Key properties | |---|---| | TabControlMultiLineView | FixedHeaders | | TabControlScrollView | ScrollButtonShowMode, AllowScrollOnMouseWheel, AllowAnimation, HeaderAutoFill, HeaderOrientation | | TabControlStretchView | TabNormalSize, TabMinSize, SelectedTabMinSize, PinnedTabSize, DragDropMode, DragDropRegion, NewWindowStyle, NewTabControlStyle; PinMode (attached, set on the tab item via dx:TabControlStretchView.PinMode) | | TabControlViewBase (base for all) | HeaderLocation (Top, Bottom, Left, Right) |

Common Patterns

Pattern 1: Document Workspace with Closable Tabs


    
        
    
    
        
            
            
        
    
    
        
            
        
    

ItemContainerStyle sets AllowHide and Header on every generated DXTabItem. Closing a tab raises TabHiding / TabHidden events.

Pattern 2: Tabs with Icons


    ...

dx:DXImage loads from the DevExpress image library; otherwise pass a regular ImageSource.

Pattern 3: Cached Tab Content for Fast Switching


    ...

All tab contents are constructed once and kept in memory. Use when re-creating content is expensive (e.g., heavy data grids).

Pattern 4: Header Panel on the Side


    
        
    
    ...

Pattern 5: Custom Buttons in the Tab Strip


    
        
            
                
                
            
        
    
    ...

Troubleshooting

| Symptom | Cause | Solution | |---|---|---| | Two title bars, mismatched colors above the tabs | Host is Window, not ThemedWindow | Convert the window — see Getting Started. | | ControlBoxLeftTemplate doesn't show | Host is Window, not ThemedWindow — left/right control box renders in the title bar | Convert to ThemedWindow. | | ItemsSource items show but headers are blank | ItemHeaderTemplate not set (or doesn't bind the right property) | Set ItemHeaderTemplate with a DataTemplate that binds to the header property. | | Tab content disappears on tab switch and reloads when switching back | Default is to re-create the content on every selection | Set TabContentCacheMode="CacheAllTabs" (or CacheTabsOnSelecting). | | Headers overflow off-screen | Default view (Scroll) without scroll buttons visible — ScrollButtonShowMode may be Never | Use AutoHideBothButtons, or switch to MultiLine view. | | Drag-drop doesn't work | View is MultiLine or Scroll — drag-drop is Stretch-only | Use TabControlStretchView and set DragDropMode. | | AccentColor doesn't show / is ignored | Set as a Brush instead of a Color | Use a Color value (AccentColor="Red"), not a brush. | | SelectionChanging cancel doesn't work | Setting e.Cancel = false (default) or handling SelectionChanged instead | Use SelectionChanging; set e.Cancel = true. | | Glyph doesn't render | Path / URI wrong, or used a Brush where an ImageSource is expected | Use {dx:DXImage Image=...} or a proper pack: URI to an embedded image. |

Constraints & Rules

CRITICAL — follow these rules in every interaction:

  1. Build verification: After changes, run dotnet build and report errors before claiming success.
  2. Target framework: Windows-only (net{X}-windows, UseWPF=true).
  3. Use ThemedWindow as the host when adding DXTabControl. Plain Window "works" but has visual artifacts; never the right choice for production.
  4. NuGet: install DevExpress.Wpf.Core (DXTabControl lives in core).
  5. Default to Scroll view for unknown tab counts; switch to MultiLine or Stretch based on the design's overflow handling.
  6. For dynamic tabs, use ItemsSource + ItemHeaderTemplate + ItemTemplate — don't manipulate Items directly when there's a backing view-model collection.
  7. AccentColor and BorderColor are Color values, not brushes.
  8. Drag-drop, pinning, and pop-out windows are Stretch-view-onlyTabControlStretchView is the only view that exposes these features.
  9. Set TabContentCacheMode explicitly when content re-creation is expensive — the default is no caching.

Using DevExpress Documentation MCP

  • Search: devexpress_docs_search(technology="WPF", query="DXTabControl view header customization")
  • Fetch: devexpress_docs_get_content(url="https://docs.devexpress.com/WPF/7975")

Use MCP for: drag-drop deep-dives (DragDropMode, DragDropRegion), the DXTabbedWindow (https://docs.devexpress.com/content/WPF/DevExpress.Xpf.Core.DXTabbedWindow?md=true), restricting selection (SelectionChanging), header menu customization, and adding/removing tabs at runtime.


Next Steps

Start with [Getting Started](references/getting-started.md) for the ThemedWindow conversion and a first tab control. Then [Defining Tabs](references/defining-tabs.md) for static vs. dynamic patterns. [Views](references/views.md) for overflow behavior. [Appearance](references/appearance.md) for colorized tabs, custom theming, and templated regions.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.