Themes/MaterialDesignTheme.Snackbar.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:converters="clr-namespace:MaterialDesignThemes.Wpf.Converters" xmlns:system="clr-namespace:System;assembly=mscorlib" xmlns:wpf="clr-namespace:MaterialDesignThemes.Wpf"> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Button.xaml" /> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.TextBlock.xaml" /> </ResourceDictionary.MergedDictionaries> <Style x:Key="MaterialDesignSnackbarActionButton" TargetType="Button"> <Setter Property="Background" Value="Transparent" /> <Setter Property="BorderBrush" Value="Transparent" /> <Setter Property="BorderThickness" Value="1" /> <Setter Property="Cursor" Value="Hand" /> <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary}" /> <Setter Property="Height" Value="36" /> <Setter Property="HorizontalContentAlignment" Value="Center" /> <Setter Property="Margin" Value="8,-10,-8,-10" /> <Setter Property="Padding" Value="8" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Button}"> <Grid x:Name="Root" Background="{TemplateBinding Background}"> <wpf:Ripple Padding="{TemplateBinding Padding}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" Focusable="False" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.SnackBar.MouseOver}" /> </Trigger> <Trigger Property="IsEnabled" Value="false"> <Setter Property="Opacity" Value="0.38" /> </Trigger> <Trigger Property="DockPanel.Dock" Value="Bottom"> <Setter Property="Margin" Value="0,18,-8,-8" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="TextBlock.FontSize" Value="14" /> <Setter Property="TextBlock.FontWeight" Value="Medium" /> <Setter Property="VerticalAlignment" Value="Stretch" /> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Button.Ripple}" /> </Style> <Style x:Key="MaterialDesignSnackbarActionLightButton" TargetType="Button" BasedOn="{StaticResource MaterialDesignSnackbarActionButton}"> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" /> </Style> <Style x:Key="MaterialDesignSnackbarActionMidButton" TargetType="Button" BasedOn="{StaticResource MaterialDesignSnackbarActionButton}"> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> </Style> <Style x:Key="MaterialDesignSnackbarActionDarkButton" TargetType="Button" BasedOn="{StaticResource MaterialDesignSnackbarActionButton}"> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" /> </Style> <Style TargetType="wpf:SnackbarMessage"> <Setter Property="HorizontalContentAlignment" Value="Left" /> <Setter Property="Margin" Value="16" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="wpf:SnackbarMessage"> <DockPanel> <!-- will become a Panel to wrap a "pretend" button --> <Button x:Name="PART_ActionButton" HorizontalAlignment="Right" Panel.ZIndex="1" Command="{TemplateBinding ActionCommand}" CommandParameter="{TemplateBinding ActionCommandParameter}" Content="{TemplateBinding ActionContent}" ContentStringFormat="{TemplateBinding ActionContentStringFormat}" ContentTemplate="{TemplateBinding ActionContentTemplate}" ContentTemplateSelector="{TemplateBinding ActionContentTemplateSelector}" Style="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type wpf:Snackbar}}, Path=ActionButtonStyle}" Visibility="{TemplateBinding ActionContent, Converter={x:Static converters:NullableToVisibilityConverter.CollapsedInstance}}"> <DockPanel.Dock> <MultiBinding Converter="{x:Static converters:SnackbarActionButtonPlacementModeConverter.Instance}"> <Binding Path="ActionButtonPlacement" RelativeSource="{RelativeSource AncestorType={x:Type wpf:Snackbar}}" /> <Binding Path="(wpf:SnackbarMessage.InlineActionButtonMaxHeight)" RelativeSource="{RelativeSource AncestorType={x:Type wpf:Snackbar}}" /> <Binding Path="ActualHeight" RelativeSource="{RelativeSource AncestorType={x:Type wpf:Snackbar}}" /> </MultiBinding> </DockPanel.Dock> </Button> <ContentPresenter MaxHeight="{Binding RelativeSource={RelativeSource AncestorType={x:Type wpf:Snackbar}}, Path=(wpf:SnackbarMessage.ContentMaxHeight)}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" ContentTemplate="{TemplateBinding ContentTemplate}" ContentTemplateSelector="{TemplateBinding ContentTemplateSelector}"> <ContentPresenter.Resources> <DataTemplate DataType="{x:Type system:String}"> <TextBlock Padding="0" Text="{Binding}"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource MaterialDesignBody1TextBlock}"> <Setter Property="FontSize" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type wpf:Snackbar}}, Path=FontSize}" /> <Setter Property="FontWeight" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type wpf:Snackbar}}, Path=FontWeight}" /> <Setter Property="TextTrimming" Value="CharacterEllipsis" /> <Setter Property="TextWrapping" Value="WrapWithOverflow" /> </Style> </TextBlock.Style> </TextBlock> </DataTemplate> </ContentPresenter.Resources> </ContentPresenter> </DockPanel> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style TargetType="wpf:Snackbar"> <Setter Property="ActionButtonStyle" Value="{StaticResource MaterialDesignSnackbarActionButton}" /> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.SnackBar.Background}" /> <Setter Property="ClipToBounds" Value="True" /> <Setter Property="FontSize" Value="14" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Background}" /> <Setter Property="HorizontalAlignment" Value="Center" /> <Setter Property="MaxWidth" Value="568" /> <Setter Property="MinWidth" Value="288" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="wpf:Snackbar"> <ControlTemplate.Resources> <Storyboard x:Key="ActivateStoryboard" Duration="0:0:0.3"> <DoubleAnimation Storyboard.TargetName="Root" Storyboard.TargetProperty="Tag" From="0" To="1" Duration="0:0:0.3"> <DoubleAnimation.EasingFunction> <SineEase EasingMode="EaseOut" /> </DoubleAnimation.EasingFunction> </DoubleAnimation> <DoubleAnimation BeginTime="0" Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation BeginTime="0:0:0.075" Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:0.225"> <DoubleAnimation.EasingFunction> <SineEase EasingMode="EaseOut" /> </DoubleAnimation.EasingFunction> </DoubleAnimation> </Storyboard> <Storyboard x:Key="DeactivateStoryboard" Duration="0:0:0.3"> <DoubleAnimation Storyboard.TargetName="Root" Storyboard.TargetProperty="Tag" From="1" To="0" Duration="0:0:0.3"> <DoubleAnimation.EasingFunction> <SineEase EasingMode="EaseOut" /> </DoubleAnimation.EasingFunction> </DoubleAnimation> </Storyboard> </ControlTemplate.Resources> <StackPanel x:Name="Root"> <StackPanel.Tag> <system:Double>0.0</system:Double> </StackPanel.Tag> <StackPanel.Height> <MultiBinding Converter="{x:Static converters:MathMultipleConverter.MultiplyInstance}"> <Binding ElementName="ContentBorder" Path="ActualHeight" /> <Binding Path="Tag" RelativeSource="{RelativeSource Self}" /> </MultiBinding> </StackPanel.Height> <Border x:Name="ContentBorder" MinHeight="48" VerticalAlignment="Stretch" Background="{TemplateBinding Background}" CornerRadius="3" SnapsToDevicePixels="True"> <ContentPresenter x:Name="ContentPresenter" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content="{TemplateBinding Message}" /> </Border> </StackPanel> <ControlTemplate.Triggers> <Trigger Property="IsActive" Value="True"> <Trigger.EnterActions> <BeginStoryboard Storyboard="{StaticResource ActivateStoryboard}" /> </Trigger.EnterActions> <Trigger.ExitActions> <BeginStoryboard Storyboard="{StaticResource DeactivateStoryboard}" /> </Trigger.ExitActions> </Trigger> <Trigger Property="HorizontalAlignment" Value="Stretch"> <Setter TargetName="ContentBorder" Property="CornerRadius" Value="0" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="VerticalAlignment" Value="Bottom" /> <Setter Property="VerticalContentAlignment" Value="Center" /> <Style.Triggers> <Trigger Property="HorizontalAlignment" Value="Stretch"> <Setter Property="MaxWidth" Value="{x:Static system:Double.MaxValue}" /> </Trigger> </Style.Triggers> </Style> </ResourceDictionary> |