Skip to main content

DevExpress v24.2 Update — Your Feedback Matters

Our What's New in v24.2 webpage includes product-specific surveys. Your response to our survey questions will help us measure product satisfaction for features released in this major update and help us refine our plans for our next major release.

Take the survey Not interested

How to: Prevent the Tab Items from being Selected

  • 4 minutes to read

The following example handles the DXTabControl.SelectionChanging event and does not allow users to select tab items if their IsUrgent property is set to false.

<Window xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        x:Class="DXTabControl_RestrictingSelection.MainWindow" 
        Title="MainWindow" Height="350" Width="525">
    <Grid x:Name="LayoutRoot" Loaded="LayoutRoot_Loaded">
        <dx:DXTabControl x:Name="tabControl" Height="140" Width="300" 
                         SelectionChanging="tabControl_SelectionChanging">
            <dx:DXTabControl.ItemHeaderTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Path=ProductName}" />
                </DataTemplate>
            </dx:DXTabControl.ItemHeaderTemplate>
            <dx:DXTabControl.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="ID = " />
                            <TextBlock Text="{Binding Path=ID}" Foreground="Blue" />
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="Price = " />
                            <TextBlock Text="{Binding Path=Price}" Foreground="Blue" />
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="Discount = " />
                            <TextBlock Text="{Binding Path=Discount}" Foreground="Blue" />
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="Order Date = " />
                            <TextBlock Text="{Binding Path=OrderDate}" Foreground="Blue" />
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="Status = " />
                            <TextBlock Text="{Binding Path=Status}" Foreground="Blue" />
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="Urgent = " />
                            <TextBlock Text="{Binding Path=IsUrgent}" Foreground="Blue" />
                        </StackPanel>
                    </StackPanel>
                </DataTemplate>
            </dx:DXTabControl.ItemTemplate>
            <dx:DXTabControl.View>
                <dx:TabControlScrollView ShowHeaderMenu="True" />
            </dx:DXTabControl.View>
        </dx:DXTabControl>
    </Grid>
</Window>
using System.Windows;
using DevExpress.Xpf.Core;
using DXExample.DemoData;

namespace DXTabControl_RestrictingSelection {
    public partial class MainWindow : Window {
        public MainWindow() {
            InitializeComponent();
        }
        private void LayoutRoot_Loaded(object sender, RoutedEventArgs e) {
            tabControl.ItemsSource = Invoice.GetData();
        }
        private void tabControl_SelectionChanging(object sender,
            TabControlSelectionChangingEventArgs e) {
            if (!((Invoice)tabControl.Items[e.NewSelectedIndex]).IsUrgent)
                e.Cancel = true;
        }
    }
}
using System;
using System.Collections.Generic;

namespace DXExample.DemoData {
    public enum InvoiceStatus { Ordered, Payed, Shipped, Delivered, Invalidated }
    public class Invoice {
        public int ID { get; set; }
        public string ProductName { get; set; }
        public double Price { get; set; }
        public DateTime OrderDate { get; set; }
        public double Discount { get; set; }
        public bool IsUrgent { get; set; }
        public InvoiceStatus Status { get; set; }
        static public List<Invoice> GetData() {
            List<Invoice> data = new List<Invoice>();

            data.Add(new Invoice() { ID = 0, ProductName = "Tofu", IsUrgent = false,
                Price = 235.54, Discount = 9.4, Status = InvoiceStatus.Invalidated,
                OrderDate = new DateTime(2009, 3, 12) });
            data.Add(new Invoice() { ID = 1, ProductName = "Ravioli Angelo", IsUrgent = true,
                Price = 178.45, Discount = 6.1, Status = InvoiceStatus.Delivered,
                OrderDate = new DateTime(2009, 2, 9) });
            data.Add(new Invoice() { ID = 2, ProductName = "Geitost", IsUrgent = false,
                Price = 89.98, Discount = 5.4, Status = InvoiceStatus.Payed,
                OrderDate = new DateTime(2009, 4, 1) });
            data.Add(new Invoice() { ID = 3, ProductName = "Chang", IsUrgent = true,
                Price = 189.33, Discount = 18.2, Status = InvoiceStatus.Shipped,
                OrderDate = new DateTime(2009, 5, 23) });
            data.Add(new Invoice() { ID = 4, ProductName = "Inlagd Sill", IsUrgent = false, 
                Price = 509.10, Discount = 22.2, Status = InvoiceStatus.Ordered,
                OrderDate = new DateTime(2009, 6, 30) });
            data.Add(new Invoice() { ID = 5, ProductName = "Alice Mutton", IsUrgent = true,
                Price = 791.18, Discount = 24.4, Status = InvoiceStatus.Invalidated,
                OrderDate = new DateTime(2009, 5, 7) });

            return data;
        }
    }
}