Skip to content

Instantly share code, notes, and snippets.

@ButchersBoy
Created August 31, 2015 11:06
Show Gist options
  • Select an option

  • Save ButchersBoy/52483a41136013de8696 to your computer and use it in GitHub Desktop.

Select an option

Save ButchersBoy/52483a41136013de8696 to your computer and use it in GitHub Desktop.
Palette Helper in Code-behind
<Window x:Class="MaterialDesignColors.WpfExample.PaletteSelectorWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MaterialDesignColors.WpfExample"
xmlns:wpf="clr-namespace:MaterialDesignThemes.Wpf;assembly=MaterialDesignThemes.Wpf"
xmlns:materialDesignColors="clr-namespace:MaterialDesignColors;assembly=MaterialDesignColors"
mc:Ignorable="d"
Title="PaletteSelectorWindow" Height="300" Width="300"
TextElement.Foreground="{DynamicResource MaterialDesignBody}"
Background="{DynamicResource MaterialDesignPaper}"
FontFamily="pack://application:,,,/MaterialDesignThemes.Wpf;component/Resources/Roboto/#Roboto"
d:DataContext="{d:DesignInstance local:PaletteSelectorViewModel, IsDesignTimeCreatable=False}">
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
<Style TargetType="Button" BasedOn="{StaticResource MaterialDesignFlatButton}">
<Setter Property="Margin" Value="0" />
<Setter Property="CommandParameter" Value="{Binding}" />
<Setter Property="VerticalAlignment" Value="Stretch" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="Foreground">
<Setter.Value>
<SolidColorBrush Color="{Binding ExemplarHue.Foreground, Mode=OneTime}" />
</Setter.Value>
</Setter>
</Style>
<Style x:Key="PalettePath" TargetType="Path">
<Setter Property="Data" Value="M17.5,12A1.5,1.5 0 0,1 16,10.5A1.5,1.5 0 0,1 17.5,9A1.5,1.5 0 0,1 19,10.5A1.5,1.5 0 0,1 17.5,12M14.5,8A1.5,1.5 0 0,1 13,6.5A1.5,1.5 0 0,1 14.5,5A1.5,1.5 0 0,1 16,6.5A1.5,1.5 0 0,1 14.5,8M9.5,8A1.5,1.5 0 0,1 8,6.5A1.5,1.5 0 0,1 9.5,5A1.5,1.5 0 0,1 11,6.5A1.5,1.5 0 0,1 9.5,8M6.5,12A1.5,1.5 0 0,1 5,10.5A1.5,1.5 0 0,1 6.5,9A1.5,1.5 0 0,1 8,10.5A1.5,1.5 0 0,1 6.5,12M12,3A9,9 0 0,0 3,12A9,9 0 0,0 12,21A1.5,1.5 0 0,0 13.5,19.5C13.5,19.11 13.35,18.76 13.11,18.5C12.88,18.23 12.73,17.88 12.73,17.5A1.5,1.5 0 0,1 14.23,16H16A5,5 0 0,0 21,11C21,6.58 16.97,3 12,3Z" />
<Setter Property="Fill">
<Setter.Value>
<SolidColorBrush Color="{Binding ExemplarHue.Foreground, Mode=OneTime}" />
</Setter.Value>
</Setter>
</Style>
<DataTemplate DataType="{x:Type materialDesignColors:Swatch}">
<wpf:Card Margin="4" Width="240">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Name}" Margin="8" Grid.ColumnSpan="2" />
<Border Grid.Row="1" Grid.Column="0" MinWidth="120">
<Border.Background>
<SolidColorBrush Color="{Binding ExemplarHue.Color, Mode=OneTime}" />
</Border.Background>
<Button Click="ButtonBase_OnClick" CommandParameter="{Binding}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Primary" />
<Viewbox Width="16" Height="16">
<Canvas Width="24" Height="24">
<Path Style="{StaticResource PalettePath}" />
</Canvas>
</Viewbox>
</StackPanel>
</Button>
</Border>
<Border Grid.Row="1" Grid.Column="1"
Visibility="{Binding IsAccented, Converter={StaticResource BooleanToVisibilityConverter}, Mode=OneTime}"
Width="120">
<Border.Background>
<SolidColorBrush Color="{Binding AccentExemplarHue.Color, Mode=OneTime}" />
</Border.Background>
<Button Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:PaletteSelectorWindow}}, Path=DataContext.ApplyAccentCommand, Mode=OneTime}"
CommandParameter="{Binding}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Accent" />
<Viewbox Width="16" Height="16">
<Canvas Width="24" Height="24">
<Path Style="{StaticResource PalettePath}" />
</Canvas>
</Viewbox>
</StackPanel>
</Button>
</Border>
</Grid>
</wpf:Card>
</DataTemplate>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Margin="8">
<TextBlock VerticalAlignment="Center">Light</TextBlock>
<ToggleButton Margin="8 0 16 0" Command="{Binding ToggleBaseCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=IsChecked}" />
<TextBlock VerticalAlignment="Center">Dark</TextBlock>
</StackPanel>
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<ItemsControl Loaded="FrameworkElement_OnLoaded">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ScrollViewer>
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using MaterialDesignThemes.Wpf;
namespace MaterialDesignColors.WpfExample
{
/// <summary>
/// Interaction logic for PaletteSelectorWindow.xaml
/// </summary>
public partial class PaletteSelectorWindow : Window
{
public PaletteSelectorWindow()
{
InitializeComponent();
}
private void FrameworkElement_OnLoaded(object sender, RoutedEventArgs e)
{
var target = ((ItemsControl) sender).Items;
foreach (var swatch in new SwatchesProvider().Swatches)
target.Add(swatch);
}
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
new PaletteHelper().ReplacePrimaryColor((Swatch)((Button)sender).CommandParameter);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment