Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
SmartHintNew (copy) in place. Now it must be reworked to get rid of m…
…agic numbers and weirdness
  • Loading branch information
nicolaihenriksen committed Feb 16, 2024
commit 7205a856b09af0fdc670114e4042bef56c833a6e
18 changes: 18 additions & 0 deletions MaterialDesignThemes.Wpf/SmartHintNew.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using MaterialDesignThemes.Wpf.Converters;

namespace MaterialDesignThemes.Wpf;

/// <summary>
/// A control that implement placeholder behavior. Can work as a simple placeholder either as a floating hint, see <see cref="UseFloating"/> property.
/// <para/>
/// To set a target control you should set the HintProxy property. Use the <see cref="HintProxyFabricConverter.Instance"/> converter which converts a control into the IHintProxy interface.
/// </summary>
[TemplateVisualState(GroupName = ContentStatesGroupName, Name = HintRestingPositionName)]
[TemplateVisualState(GroupName = ContentStatesGroupName, Name = HintFloatingPositionName)]
public class SmartHintNew : SmartHint
{
static SmartHintNew()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(SmartHintNew), new FrameworkPropertyMetadata(typeof(SmartHintNew)));
}
}
1 change: 1 addition & 0 deletions MaterialDesignThemes.Wpf/Themes/Generic.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.TimePicker.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Shadows.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.SmartHint.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.SmartHintNew.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Snackbar.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.AutoSuggestBox.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.SplitButton.xaml" />
Expand Down
204 changes: 204 additions & 0 deletions MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.SmartHintNew.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
<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">

<converters:BooleanToVisibilityConverter x:Key="BoolToVisConverter" />
<converters:BooleanToVisibilityConverter x:Key="InverseBoolToVisConverter"
FalseValue="Visible"
TrueValue="Collapsed" />
<converters:FloatingHintTransformConverter x:Key="FloatingHintClippingGridTransformConverter" ApplyScaleTransform="False" />
<converters:FloatingHintTransformConverter x:Key="FloatingHintTransformConverter" ApplyTranslateTransform="False" />
<converters:FloatingHintTextBlockMarginConverter x:Key="FloatingHintTextBlockMarginConverter" />
<converters:VerticalAlignmentConverter x:Key="VerticalAlignmentConverter" />
<system:Double x:Key="NoContentFloatingScale">1.0</system:Double>
<CubicEase x:Key="AnimationEasingFunction" EasingMode="EaseInOut" />

<Style TargetType="{x:Type wpf:SmartHintNew}">
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="HorizontalContentAlignment" Value="Left" />
<Setter Property="IsHitTestVisible" Value="False" />
<Setter Property="IsTabStop" Value="False" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type wpf:SmartHintNew}">
<Grid Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
VerticalAlignment="{TemplateBinding VerticalAlignment}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ContentStates">
<VisualStateGroup.Transitions>
<VisualTransition From="*" To="HintFloatingPosition">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="SimpleHintTextBlock"
Storyboard.TargetProperty="Opacity"
To="0"
Duration="0:0:0" />
</Storyboard>
</VisualTransition>
<VisualTransition From="*" To="HintRestingPosition">
<Storyboard>
<DoubleAnimation EasingFunction="{StaticResource AnimationEasingFunction}"
Storyboard.TargetName="SimpleHintTextBlock"
Storyboard.TargetProperty="Opacity"
Duration="0:0:0.15" />
</Storyboard>
</VisualTransition>
</VisualStateGroup.Transitions>
<VisualState x:Name="HintFloatingPosition">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="SimpleHintTextBlock"
Storyboard.TargetProperty="Opacity"
To="0"
Duration="0" />
</Storyboard>
</VisualState>
<VisualState x:Name="HintRestingPosition">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="SimpleHintTextBlock"
Storyboard.TargetProperty="Opacity"
Duration="0" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<ContentControl x:Name="SimpleHintTextBlock"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Content="{TemplateBinding Hint}"
FontSize="{TemplateBinding FontSize}"
IsHitTestVisible="False"
IsTabStop="False"
Opacity="{TemplateBinding HintOpacity}"
Visibility="{TemplateBinding UseFloating, Converter={StaticResource InverseBoolToVisConverter}}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="VerticalAlignment" Value="Top" />
<Setter Property="VerticalContentAlignment" Value="Bottom" />
<Style.Triggers>
<Trigger Property="UseFloating" Value="True">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type wpf:SmartHintNew}">
<Grid Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
VerticalAlignment="{TemplateBinding VerticalAlignment}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ContentStates">
<VisualStateGroup.Transitions>
<VisualTransition From="*" To="HintFloatingPosition">
<Storyboard>
<DoubleAnimation EasingFunction="{StaticResource AnimationEasingFunction}"
Storyboard.TargetName="FloatingHintTextBlock"
Storyboard.TargetProperty="Opacity"
To="{TemplateBinding HintOpacity}"
Duration="0:0:0.15" />
<DoubleAnimation EasingFunction="{StaticResource AnimationEasingFunction}"
Storyboard.TargetName="ScaleHost"
Storyboard.TargetProperty="Scale"
To="1"
Duration="0:0:0.15" />
</Storyboard>
</VisualTransition>
<VisualTransition From="*" To="HintRestingPosition">
<Storyboard>
<DoubleAnimation EasingFunction="{StaticResource AnimationEasingFunction}"
Storyboard.TargetName="FloatingHintTextBlock"
Storyboard.TargetProperty="Opacity"
Duration="0:0:0.15" />
<DoubleAnimation EasingFunction="{StaticResource AnimationEasingFunction}"
Storyboard.TargetName="ScaleHost"
Storyboard.TargetProperty="Scale"
Duration="0:0:0.15" />
</Storyboard>
</VisualTransition>
</VisualStateGroup.Transitions>
<VisualState x:Name="HintFloatingPosition">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="FloatingHintTextBlock"
Storyboard.TargetProperty="Opacity"
To="{TemplateBinding HintOpacity}"
Duration="0" />
<DoubleAnimation Storyboard.TargetName="ScaleHost"
Storyboard.TargetProperty="Scale"
To="1"
Duration="0" />
</Storyboard>
</VisualState>
<VisualState x:Name="HintRestingPosition">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="FloatingHintTextBlock"
Storyboard.TargetProperty="Opacity"
Duration="0" />
<DoubleAnimation Storyboard.TargetName="ScaleHost"
Storyboard.TargetProperty="Scale"
Duration="0" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<wpf:ScaleHost x:Name="ScaleHost" />
<Grid x:Name="HintClippingGrid"
VerticalAlignment="{TemplateBinding VerticalContentAlignment, Converter={StaticResource VerticalAlignmentConverter}}"
ClipToBounds="True" Background="Fuchsia">
<Grid.RenderTransform>
<MultiBinding Converter="{StaticResource FloatingHintClippingGridTransformConverter}">
<Binding ElementName="ScaleHost" Path="Scale" />
<Binding Path="FloatingScale" RelativeSource="{RelativeSource TemplatedParent}" />
<Binding Source="{StaticResource NoContentFloatingScale}" />
<Binding Path="FloatingOffset" RelativeSource="{RelativeSource TemplatedParent}" />
<Binding Path="InitialVerticalOffset" RelativeSource="{RelativeSource TemplatedParent}" />
</MultiBinding>
</Grid.RenderTransform>
<Canvas Width="{Binding ElementName=FloatingHintTextBlock, Path=ActualWidth}"
Height="{Binding ElementName=FloatingHintTextBlock, Path=ActualHeight}"
HorizontalAlignment="Left">
<ContentControl x:Name="FloatingHintTextBlock"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Content="{TemplateBinding Hint}"
FontFamily="{TemplateBinding FontFamily}"
FontSize="{TemplateBinding FontSize}"
IsHitTestVisible="False"
IsTabStop="False"
Opacity="{TemplateBinding HintOpacity}"
RenderTransformOrigin="0,0"
Visibility="{TemplateBinding UseFloating, Converter={StaticResource BoolToVisConverter}}">
<ContentControl.Margin>
<MultiBinding Converter="{StaticResource FloatingHintTextBlockMarginConverter}">
<Binding Path="(wpf:HintAssist.FloatingHintHorizontalAlignment)" RelativeSource="{RelativeSource TemplatedParent}" />
<Binding Path="HorizontalContentAlignment" RelativeSource="{RelativeSource TemplatedParent}" />
<Binding Path="ActualWidth" RelativeSource="{RelativeSource Self}" />
<Binding Path="ActualWidth" RelativeSource="{RelativeSource TemplatedParent}" />
<Binding ElementName="ScaleHost" Path="Scale" />
<Binding Path="FloatingScale" RelativeSource="{RelativeSource TemplatedParent}" />
<Binding Source="{StaticResource NoContentFloatingScale}" />
</MultiBinding>
</ContentControl.Margin>
<ContentControl.Tag>
<system:Double>0.0</system:Double>
</ContentControl.Tag>
<ContentControl.RenderTransform>
<MultiBinding Converter="{StaticResource FloatingHintTransformConverter}">
<Binding ElementName="ScaleHost" Path="Scale" />
<Binding Path="FloatingScale" RelativeSource="{RelativeSource TemplatedParent}" />
<Binding Source="{StaticResource NoContentFloatingScale}" />
<Binding Path="FloatingOffset" RelativeSource="{RelativeSource TemplatedParent}" />
<Binding Path="InitialVerticalOffset" RelativeSource="{RelativeSource TemplatedParent}" />
</MultiBinding>
</ContentControl.RenderTransform>
</ContentControl>
</Canvas>
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>

</ResourceDictionary>
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@
UseLayoutRounding="{TemplateBinding UseLayoutRounding}"
VerticalScrollBarVisibility="Hidden" />

<wpf:SmartHint x:Name="Hint"
<wpf:SmartHintNew x:Name="Hint"
Grid.Column="2"
VerticalAlignment="Center"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
Expand All @@ -193,14 +193,14 @@
HintOpacity="{TemplateBinding wpf:HintAssist.HintOpacity}"
HintProxy="{Binding RelativeSource={RelativeSource TemplatedParent}, Converter={x:Static converters:HintProxyFabricConverter.Instance}}"
UseFloating="{TemplateBinding wpf:HintAssist.IsFloating}">
<wpf:SmartHint.Hint>
<wpf:SmartHintNew.Hint>
<Border x:Name="HintBackgroundBorder"
Background="{TemplateBinding wpf:HintAssist.Background}"
CornerRadius="2">
<ContentPresenter x:Name="HintWrapper" Content="{TemplateBinding wpf:HintAssist.Hint}" />
</Border>
</wpf:SmartHint.Hint>
</wpf:SmartHint>
</wpf:SmartHintNew.Hint>
</wpf:SmartHintNew>

<TextBlock x:Name="SuffixTextBlock"
Grid.Column="3"
Expand Down