Skip to content

Commit

Permalink
ContentCharacterCasing usage instead PreserveTextCase
Browse files Browse the repository at this point in the history
  • Loading branch information
punker76 committed Oct 3, 2015
1 parent c08ea61 commit ed1f148
Show file tree
Hide file tree
Showing 6 changed files with 108 additions and 55 deletions.
23 changes: 0 additions & 23 deletions MahApps.Metro/Controls/Helper/ControlsHelper.cs
Expand Up @@ -32,32 +32,9 @@ public static void SetDisabledVisualElementVisibility(UIElement element, Visibil
element.SetValue(DisabledVisualElementVisibilityProperty, value);
}

public static readonly DependencyProperty PreserveTextCaseProperty = DependencyProperty.RegisterAttached("PreserveTextCase", typeof(bool), typeof(ControlsHelper), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.Inherits | FrameworkPropertyMetadataOptions.AffectsMeasure));

/// <summary>
/// Gets the value to override the text case behavior for the header content.
/// When set to <c>true</c>, the text case will be preserved and won't be changed to upper or lower case.
/// </summary>
[AttachedPropertyBrowsableForType(typeof(Expander))]
[AttachedPropertyBrowsableForType(typeof(GroupBox))]
public static bool GetPreserveTextCase(UIElement element)
{
return (bool)element.GetValue(PreserveTextCaseProperty);
}

/// <summary>
/// Sets the value to override the text case behavior for the header content.
/// When set to <c>true</c>, the text case will be preserved and won't be changed to upper or lower case.
/// </summary>
public static void SetPreserveTextCase(UIElement element, bool value)
{
element.SetValue(PreserveTextCaseProperty, value);
}

/// <summary>
/// The DependencyProperty for the CharacterCasing property.
/// Controls whether or not content is converted to upper or lower case
/// This will be used later for all controls which are using the PreserveTextCase property (> v1.2.0).
/// </summary>
public static readonly DependencyProperty ContentCharacterCasingProperty =
DependencyProperty.RegisterAttached(
Expand Down
61 changes: 43 additions & 18 deletions MahApps.Metro/Styles/Controls.Buttons.xaml
Expand Up @@ -297,6 +297,8 @@
<!-- style for default button -->
<Style TargetType="{x:Type Button}"
x:Key="MetroButton">
<Setter Property="Controls:ControlsHelper.ContentCharacterCasing"
Value="Upper" />
<Setter Property="Controls:ButtonHelper.CornerRadius"
Value="3" />
<Setter Property="MinHeight"
Expand Down Expand Up @@ -345,18 +347,25 @@
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="Controls:ButtonHelper.PreserveTextCase"
Value="False">
<Trigger Property="Controls:ControlsHelper.ContentCharacterCasing"
Value="Normal">
<Setter TargetName="contentPresenter"
Property="Content"
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Content}" />
</Trigger >
<Trigger Property="Controls:ControlsHelper.ContentCharacterCasing"
Value="Upper">
<Setter TargetName="contentPresenter"
Property="Content"
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Content, Converter={StaticResource ToUpperConverter}}" />
</Trigger>
<Trigger Property="Controls:ButtonHelper.PreserveTextCase"
Value="True">
<Trigger Property="Controls:ControlsHelper.ContentCharacterCasing"
Value="Lower">
<Setter TargetName="contentPresenter"
Property="Content"
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Content}" />
</Trigger >
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Content, Converter={StaticResource ToLowerConverter}}" />
</Trigger>

<Trigger Property="IsMouseOver"
Value="True">
<Setter TargetName="Background"
Expand Down Expand Up @@ -395,6 +404,8 @@

<Style x:Key="SquareButtonStyle"
TargetType="{x:Type Button}">
<Setter Property="Controls:ControlsHelper.ContentCharacterCasing"
Value="Lower" />
<Setter Property="MinHeight"
Value="25" />
<Setter Property="FontFamily"
Expand Down Expand Up @@ -465,18 +476,25 @@
</Grid>

<ControlTemplate.Triggers>
<Trigger Property="Controls:ButtonHelper.PreserveTextCase"
Value="False">
<Trigger Property="Controls:ControlsHelper.ContentCharacterCasing"
Value="Normal">
<Setter TargetName="contentPresenter"
Property="Content"
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Content, Converter={StaticResource ToLowerConverter}}" />
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Content}" />
</Trigger >
<Trigger Property="Controls:ControlsHelper.ContentCharacterCasing"
Value="Upper">
<Setter TargetName="contentPresenter"
Property="Content"
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Content, Converter={StaticResource ToUpperConverter}}" />
</Trigger>
<Trigger Property="Controls:ButtonHelper.PreserveTextCase"
Value="True">
<Trigger Property="Controls:ControlsHelper.ContentCharacterCasing"
Value="Lower">
<Setter TargetName="contentPresenter"
Property="Content"
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Content}" />
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Content, Converter={StaticResource ToLowerConverter}}" />
</Trigger>

<Trigger Property="IsMouseOver"
Value="True">
<Setter Property="Background"
Expand Down Expand Up @@ -565,18 +583,25 @@
</Grid>

<ControlTemplate.Triggers>
<Trigger Property="Controls:ButtonHelper.PreserveTextCase"
Value="False">
<Trigger Property="Controls:ControlsHelper.ContentCharacterCasing"
Value="Normal">
<Setter TargetName="contentPresenter"
Property="Content"
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Content, Converter={StaticResource ToLowerConverter}}" />
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Content}" />
</Trigger >
<Trigger Property="Controls:ControlsHelper.ContentCharacterCasing"
Value="Upper">
<Setter TargetName="contentPresenter"
Property="Content"
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Content, Converter={StaticResource ToUpperConverter}}" />
</Trigger>
<Trigger Property="Controls:ButtonHelper.PreserveTextCase"
Value="True">
<Trigger Property="Controls:ControlsHelper.ContentCharacterCasing"
Value="Lower">
<Setter TargetName="contentPresenter"
Property="Content"
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Content}" />
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Content, Converter={StaticResource ToLowerConverter}}" />
</Trigger>

<Trigger Property="IsMouseOver"
Value="True">
<Setter Property="Background"
Expand Down
22 changes: 19 additions & 3 deletions MahApps.Metro/Styles/Controls.Expander.xaml
Expand Up @@ -4,6 +4,7 @@
xmlns:Converters="clr-namespace:MahApps.Metro.Converters">

<Converters:ToUpperConverter x:Key="ToUpperConverter" />
<Converters:ToLowerConverter x:Key="ToLowerConverter" />
<Converters:ThicknessBindingConverter x:Key="ThicknessBindingConverter" />

<Style x:Key="ExpanderBaseHeaderStyle"
Expand Down Expand Up @@ -352,6 +353,8 @@

<Style x:Key="MetroExpander"
TargetType="{x:Type Expander}">
<Setter Property="Controls:ControlsHelper.ContentCharacterCasing"
Value="Upper" />
<Setter Property="Padding"
Value="5" />
<Setter Property="SnapsToDevicePixels"
Expand Down Expand Up @@ -456,12 +459,25 @@
</DockPanel>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="Controls:ControlsHelper.PreserveTextCase"
Value="False">
<Trigger Property="Controls:ControlsHelper.ContentCharacterCasing"
Value="Normal">
<Setter TargetName="ToggleSite"
Property="Content"
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Header, Mode=OneWay, Converter={StaticResource ToUpperConverter}}" />
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Header}" />
</Trigger >
<Trigger Property="Controls:ControlsHelper.ContentCharacterCasing"
Value="Upper">
<Setter TargetName="ToggleSite"
Property="Content"
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Header, Converter={StaticResource ToUpperConverter}}" />
</Trigger>
<Trigger Property="Controls:ControlsHelper.ContentCharacterCasing"
Value="Lower">
<Setter TargetName="ToggleSite"
Property="Content"
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Header, Converter={StaticResource ToLowerConverter}}" />
</Trigger>

<Trigger Property="IsExpanded"
Value="true">
<Setter TargetName="ExpandSite"
Expand Down
21 changes: 18 additions & 3 deletions MahApps.Metro/Styles/Controls.GroupBox.xaml
Expand Up @@ -4,10 +4,13 @@
xmlns:Converters="clr-namespace:MahApps.Metro.Converters">

<Converters:ToUpperConverter x:Key="ToUpperConverter" />
<Converters:ToLowerConverter x:Key="ToLowerConverter" />
<Converters:ThicknessBindingConverter x:Key="ThicknessBindingConverter" />

<Style x:Key="MetroGroupBox"
TargetType="{x:Type GroupBox}">
<Setter Property="Controls:ControlsHelper.ContentCharacterCasing"
Value="Upper" />
<Setter Property="Margin"
Value="5" />
<Setter Property="Padding"
Expand Down Expand Up @@ -78,11 +81,23 @@
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="Controls:ControlsHelper.PreserveTextCase"
Value="False">
<Trigger Property="Controls:ControlsHelper.ContentCharacterCasing"
Value="Normal">
<Setter TargetName="HeaderContent"
Property="Content"
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Header, Mode=OneWay, Converter={StaticResource ToUpperConverter}}" />
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Header}" />
</Trigger >
<Trigger Property="Controls:ControlsHelper.ContentCharacterCasing"
Value="Upper">
<Setter TargetName="HeaderContent"
Property="Content"
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Header, Converter={StaticResource ToUpperConverter}}" />
</Trigger>
<Trigger Property="Controls:ControlsHelper.ContentCharacterCasing"
Value="Lower">
<Setter TargetName="HeaderContent"
Property="Content"
Value="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Header, Converter={StaticResource ToLowerConverter}}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
Expand Down
12 changes: 6 additions & 6 deletions MahApps.Metro/Themes/Dialogs/BaseMetroDialog.xaml
Expand Up @@ -9,22 +9,22 @@

<Style BasedOn="{StaticResource SquareButtonStyle}"
TargetType="{x:Type Button}">
<Setter Property="controls:ButtonHelper.PreserveTextCase"
Value="True" />
<Setter Property="controls:ControlsHelper.ContentCharacterCasing"
Value="Normal" />
</Style>

<Style x:Key="AccentedDialogSquareButton"
BasedOn="{StaticResource AccentedSquareButtonStyle}"
TargetType="{x:Type Button}">
<Setter Property="controls:ButtonHelper.PreserveTextCase"
Value="True" />
<Setter Property="controls:ControlsHelper.ContentCharacterCasing"
Value="Normal" />
</Style>

<Style x:Key="AccentedDialogHighlightedSquareButton"
BasedOn="{StaticResource HighlightedSquareButtonStyle}"
TargetType="{x:Type Button}">
<Setter Property="controls:ButtonHelper.PreserveTextCase"
Value="True" />
<Setter Property="controls:ControlsHelper.ContentCharacterCasing"
Value="Normal" />
</Style>

<Storyboard x:Key="DialogShownStoryboard">
Expand Down
24 changes: 22 additions & 2 deletions Mahapps.Metro.Tests/ButtonTest.cs
Expand Up @@ -33,6 +33,26 @@ public async Task DefaultButtonRespectsButtonHelperPreserveTextCase()
Assert.Equal("SomeText", presenter.Content);
}

[Fact]
public async Task DefaultButtonRespectsControlsHelperContentCharacterCasing()
{
await TestHost.SwitchToAppThread();

var window = await WindowHelpers.CreateInvisibleWindowAsync<ButtonWindow>();

Button defaultButton = window.DefaultButton;
var presenter = defaultButton.FindChild<ContentPresenter>("contentPresenter");

ControlsHelper.SetContentCharacterCasing(defaultButton, CharacterCasing.Normal);
Assert.Equal("SomeText", presenter.Content);

ControlsHelper.SetContentCharacterCasing(defaultButton, CharacterCasing.Lower);
Assert.Equal("sometext", presenter.Content);

ControlsHelper.SetContentCharacterCasing(defaultButton, CharacterCasing.Upper);
Assert.Equal("SOMETEXT", presenter.Content);
}

[Fact]
public async Task SquareButtonButtonTextIsLowerCase()
{
Expand All @@ -45,14 +65,14 @@ public async Task SquareButtonButtonTextIsLowerCase()
}

[Fact]
public async Task SquareButtonBespectsButtonHelperPreserveTextCase()
public async Task SquareButtonBespectsButtonHelperContentCharacterCasing()
{
await TestHost.SwitchToAppThread();

var window = await WindowHelpers.CreateInvisibleWindowAsync<ButtonWindow>();

Button defaultButton = window.SquareButton;
ButtonHelper.SetPreserveTextCase(defaultButton, true);
ControlsHelper.SetContentCharacterCasing(defaultButton, CharacterCasing.Normal);
var presenter = defaultButton.FindChild<ContentPresenter>("contentPresenter");

Assert.Equal("SomeText", presenter.Content);
Expand Down

0 comments on commit ed1f148

Please sign in to comment.