In this article I will show how to very quickly combine Dragablz and MaterialDesignColors in WPF to create a great looking control supporting full tear-out and can use the Google Material Design colour palette.
Start a new WPF project. We rely on two NuGet packages, so get them installed straight away. Install them from the Package Manager tool in Visual Studio, or from the NuGet console, run these commands:
- Install-Package Dragablz
- Install-Package MaterialDesignColors
In the MainWindow.xaml, setup a simple usage of the Dragablz TabablzControl:
- <Window x:Class="MaterialDesignTabExample.MainWindow"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:dragablz="clr-namespace:Dragablz;assembly=Dragablz"
- Title="Material Design Demo" Height="350" Width="525">
- <dragablz:TabablzControl>
- <dragablz:TabablzControl.InterTabController>
- <dragablz:InterTabController />
- </dragablz:TabablzControl.InterTabController>
- <TabItem Header="HELLO">
- <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">Hello World</TextBlock>
- </TabItem>
- <TabItem Header="MATERIAL">
- <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">Material Design</TextBlock>
- </TabItem>
- <TabItem Header="DESIGN">
- <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">Looks Quite Nice</TextBlock>
- </TabItem>
- </dragablz:TabablzControl>
- </Window>
Already if you run this project you will have a tab control that supports Chrome-style tearing out of tabs. But it won't look too good. So, the next step is to bring in the Material Design colours and tell Dragablz to use the Material Design style.
Open your App.xaml. We need to merge in three dictionaries. The first two are to set up the Material Design colour palette. The MaterialDesignColors assembly contains a ResourceDictionary for each color (a collection of hues and accents). To create a full palette we need to bring in a primary colour, set up some hue brushes and then bring in a secondary color for our accent color. The third resource dictionary is to include the Dragablz theme for Material Design. Finally we instruct our tab control to use the correct style.
Don't worry, it's not too complicated. The following is the full App.xaml:
- <Application x:Class="MaterialDesignColors.WpfExample.App"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:dragablz="clr-namespace:Dragablz;assembly=Dragablz"
- StartupUri="MainWindow.xaml">
- <Application.Resources>
- <ResourceDictionary>
- <ResourceDictionary.MergedDictionaries>
-
- <ResourceDictionary>
-
- <ResourceDictionary.MergedDictionaries>
- <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/MaterialDesignColor.Indigo.xaml" />
- </ResourceDictionary.MergedDictionaries>
- <!--
- include three hues from the primary palette (and the associated forecolours).
- Do not rename, keep in sequence; light to dark.
- -->
- <SolidColorBrush x:Key="PrimaryHueLightBrush" Color="{StaticResource Primary100}"/>
- <SolidColorBrush x:Key="PrimaryHueLightForegroundBrush" Color="{StaticResource Primary100Foreground}"/>
- <SolidColorBrush x:Key="PrimaryHueMidBrush" Color="{StaticResource Primary500}"/>
- <SolidColorBrush x:Key="PrimaryHueMidForegroundBrush" Color="{StaticResource Primary500Foreground}"/>
- <SolidColorBrush x:Key="PrimaryHueDarkBrush" Color="{StaticResource Primary700}"/>
- <SolidColorBrush x:Key="PrimaryHueDarkForegroundBrush" Color="{StaticResource Primary700Foreground}"/>
- </ResourceDictionary>
-
-
- <ResourceDictionary>
-
- <ResourceDictionary.MergedDictionaries>
- <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/MaterialDesignColor.Yellow.xaml" />
- </ResourceDictionary.MergedDictionaries>
-
-
- <SolidColorBrush x:Key="SecondaryAccentBrush" Color="{StaticResource Accent200}"/>
- <SolidColorBrush x:Key="SecondaryAccentForegroundBrush" Color="{StaticResource Accent200Foreground}"/>
- </ResourceDictionary>
-
-
- <ResourceDictionary Source="pack://application:,,,/Dragablz;component/Themes/materialdesign.xaml"/>
-
- </ResourceDictionary.MergedDictionaries>
-
-
- <Style TargetType="{x:Type dragablz:TabablzControl}" BasedOn="{StaticResource MaterialDesignTabablzControlStyle}" />
- </ResourceDictionary>
- </Application.Resources>
- </Application>
And that's it. Fire up your baby and you are done. You can change the colours by changing the two colour resource dictionaries that are referenced. You can also tweak the hues, but
do not change the brush names. Dragablz will be looking for these.
Links:
Enjoy!