Skip to content

Commit 064d240

Browse files
committed
tidy up text demo and tweak hints for #231
1 parent 9dfd348 commit 064d240

File tree

7 files changed

+165
-70
lines changed

7 files changed

+165
-70
lines changed

MainDemo.Wpf/Domain/DemoItem.cs

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,41 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.ComponentModel;
34
using System.Linq;
5+
using System.Runtime.CompilerServices;
46
using System.Text;
57
using System.Threading.Tasks;
68

79
namespace MaterialDesignColors.WpfExample.Domain
810
{
9-
public class DemoItem
11+
public class DemoItem : INotifyPropertyChanged
1012
{
11-
public string Name { get; set; }
13+
private string _name;
14+
private object _content;
1215

13-
public object Content { get; set; }
16+
public string Name
17+
{
18+
get { return _name; }
19+
set
20+
{
21+
this.MutateVerbose(ref _name, value, RaisePropertyChanged());
22+
}
23+
}
24+
25+
public object Content
26+
{
27+
get { return _content; }
28+
set
29+
{
30+
this.MutateVerbose(ref _content, value, RaisePropertyChanged());
31+
}
32+
}
33+
34+
public event PropertyChangedEventHandler PropertyChanged;
35+
36+
private Action<PropertyChangedEventArgs> RaisePropertyChanged()
37+
{
38+
return args => PropertyChanged?.Invoke(this, args);
39+
}
1440
}
1541
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System.Windows;
2+
using System.Windows.Controls;
3+
4+
namespace MaterialDesignDemo.Domain
5+
{
6+
public class SimpleDataTemplateSelector : DataTemplateSelector
7+
{
8+
public DataTemplate FixedTemplate { get; set; }
9+
10+
public override DataTemplate SelectTemplate(object item, DependencyObject container)
11+
{
12+
return FixedTemplate;
13+
}
14+
}
15+
}

MainDemo.Wpf/Domain/TextFieldsViewModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ public int SelectedValueOne
4242

4343
public IList<int> LongListToTestComboVirtualization { get; }
4444

45+
public DemoItem DemoItem => new DemoItem { Name = "Mr. Test"};
46+
4547
public event PropertyChangedEventHandler PropertyChanged;
4648

4749
private Action<PropertyChangedEventArgs> RaisePropertyChanged()

MainDemo.Wpf/MaterialDesignDemo.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@
101101
<DependentUpon>SampleProgressDialog.xaml</DependentUpon>
102102
</Compile>
103103
<Compile Include="Domain\SelectableViewModel.cs" />
104+
<Compile Include="Domain\SimpleDataTemplateSelector.cs" />
104105
<Compile Include="Domain\TextFieldsViewModel.cs" />
105106
<Compile Include="Domain\TreesViewModel.cs" />
106107
<Compile Include="Expander.xaml.cs">

MainDemo.Wpf/TextFields.xaml

Lines changed: 112 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@
33
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
44
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
55
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
6-
xmlns:wpfExample="clr-namespace:MaterialDesignColors.WpfExample"
76
xmlns:domain="clr-namespace:MaterialDesignColors.WpfExample.Domain"
87
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
98
xmlns:materialDesignDemo="clr-namespace:MaterialDesignDemo"
10-
xmlns:system="clr-namespace:System;assembly=mscorlib"
9+
xmlns:domain1="clr-namespace:MaterialDesignDemo.Domain"
1110
mc:Ignorable="d"
1211
d:DesignHeight="300" d:DesignWidth="600" Loaded="UserControl_Loaded"
1312
d:DataContext="{d:DesignInstance domain:TextFieldsViewModel, d:IsDesignTimeCreatable=False}">
@@ -59,9 +58,15 @@
5958
<RowDefinition Height="Auto" />
6059
<RowDefinition Height="Auto" />
6160
<RowDefinition Height="Auto" />
61+
<RowDefinition Height="Auto" />
62+
<RowDefinition Height="Auto" />
63+
<RowDefinition Height="Auto" />
64+
<RowDefinition Height="Auto" />
65+
<RowDefinition Height="Auto" />
6266
</Grid.RowDefinitions>
63-
<materialDesign:PackIcon Grid.Row="0" Grid.Column="0" Kind="Account" Foreground="{Binding ElementName=NameTextBox, Path=BorderBrush}" />
64-
<TextBox Grid.Row="0" Grid.Column="1"
67+
<TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Style="{StaticResource MaterialDesignHeadlineTextBlock}">Common Fields</TextBlock>
68+
<materialDesign:PackIcon Grid.Row="1" Grid.Column="0" Kind="Account" Foreground="{Binding ElementName=NameTextBox, Path=BorderBrush}" />
69+
<TextBox Grid.Row="1" Grid.Column="1"
6570
x:Name="NameTextBox"
6671
materialDesign:TextFieldAssist.Hint="Name">
6772
<TextBox.Text>
@@ -72,97 +77,144 @@
7277
</Binding>
7378
</TextBox.Text>
7479
</TextBox>
75-
<TextBlock Grid.Row="0" Grid.Column="2" VerticalAlignment="Center" Margin="16 0 8 0">OS</TextBlock>
76-
<ComboBox Grid.Row="0" Grid.Column="3" materialDesign:TextFieldAssist.Hint="OS">
80+
<TextBlock Grid.Row="1" Grid.Column="2" VerticalAlignment="Center" Margin="16 0 8 0">OS</TextBlock>
81+
<ComboBox Grid.Row="1" Grid.Column="3" materialDesign:TextFieldAssist.Hint="OS">
7782
<ComboBoxItem>Andoid</ComboBoxItem>
7883
<ComboBoxItem>iOS</ComboBoxItem>
7984
<ComboBoxItem>Linux</ComboBoxItem>
8085
<ComboBoxItem>Windows</ComboBoxItem>
8186
</ComboBox>
82-
<TextBox Grid.Row="0" Grid.RowSpan="2" Grid.Column="4" TextWrapping="Wrap" VerticalAlignment="Stretch" Margin="16 0 0 0"
83-
MinWidth="280"
84-
AcceptsReturn="True"
85-
VerticalScrollBarVisibility="Auto"
86-
materialDesign:TextFieldAssist.Hint="Multiline text"
87-
Height="80">Multiline. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. The quick brown fox jumps over the lazy dog. War and peace. Keep going. Go on. For how long? Not long. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</TextBox>
88-
<materialDesign:PackIcon Grid.Row="1" Grid.Column="0" Kind="Phone" Foreground="{Binding ElementName=PhoneTextBox, Path=BorderBrush}" />
89-
<TextBox Grid.Row="1" Grid.Column="1"
87+
<TextBlock Grid.Row="0" Grid.Column="4" Style="{StaticResource MaterialDesignHeadlineTextBlock}" Margin="32 0 0 0">Multi-line</TextBlock>
88+
<TextBox Grid.Row="1" Grid.RowSpan="2" Grid.Column="4" TextWrapping="Wrap" VerticalAlignment="Stretch" Margin="32 0 0 0"
89+
MinWidth="280"
90+
AcceptsReturn="True"
91+
VerticalScrollBarVisibility="Auto"
92+
materialDesign:TextFieldAssist.Hint="Multiline text"
93+
Height="80">Multiline. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. The quick brown fox jumps over the lazy dog. War and peace. Keep going. Go on. For how long? Not long. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</TextBox>
94+
<materialDesign:PackIcon Grid.Row="2" Grid.Column="0" Kind="Phone" Foreground="{Binding ElementName=PhoneTextBox, Path=BorderBrush}" />
95+
<TextBox Grid.Row="2" Grid.Column="1"
9096
x:Name="PhoneTextBox"
9197
materialDesign:TransitionAssist.DisableTransitions="True"
9298
/>
93-
<TextBlock Grid.Row="1" Grid.Column="2" VerticalAlignment="Center" Margin="16 0 8 0">Fruit</TextBlock>
94-
<ComboBox Grid.Row="1" Grid.Column="3" materialDesign:TextFieldAssist.Hint="Search"
99+
<TextBlock Grid.Row="2" Grid.Column="2" VerticalAlignment="Center" Margin="16 0 8 0">Fruit</TextBlock>
100+
<ComboBox Grid.Row="2" Grid.Column="3" materialDesign:TextFieldAssist.Hint="Search"
95101
IsEditable="True" materialDesign:TextFieldAssist.HintOpacity=".26">
96102
<ComboBoxItem>Apple</ComboBoxItem>
97103
<ComboBoxItem>Banana</ComboBoxItem>
98104
<ComboBoxItem>Pear</ComboBoxItem>
99105
<ComboBoxItem>Orange</ComboBoxItem>
100106
</ComboBox>
101-
<materialDesign:PackIcon Grid.Row="2" Grid.Column="0" Kind="Comment" Foreground="{Binding ElementName=CommentTextBox, Path=BorderBrush}" />
102-
<TextBox Grid.Row="2" Grid.Column="1"
103-
x:Name="CommentTextBox"
104-
materialDesign:TextFieldAssist.Hint="Comment"
107+
<materialDesign:PackIcon Grid.Row="3" Grid.Column="0" Kind="Comment" Foreground="{Binding ElementName=CommentTextBox, Path=BorderBrush}" />
108+
<TextBox Grid.Row="3" Grid.Column="1"
109+
x:Name="CommentTextBox"
110+
materialDesign:TextFieldAssist.Hint="Comment"
105111
/>
106-
<materialDesign:PackIcon Grid.Row="2" Grid.Column="2" Kind="Key" Foreground="{Binding ElementName=PasswordBox, Path=BorderBrush}" HorizontalAlignment="Right" />
107-
<PasswordBox Grid.Row="2" Grid.Column="3"
112+
<materialDesign:PackIcon Grid.Row="3" Grid.Column="2" Kind="Key" Foreground="{Binding ElementName=PasswordBox, Path=BorderBrush}" HorizontalAlignment="Right" />
113+
<PasswordBox Grid.Row="3" Grid.Column="3"
108114
x:Name="PasswordBox"
109115
materialDesign:TextFieldAssist.Hint="Password" />
110-
<TextBox Grid.Row="3" Grid.Column="1" materialDesign:TextFieldAssist.Hint="Floating Hint" Style="{StaticResource MaterialDesignFloatingHintTextBox}"
111-
Margin="0 8 0 8"/>
112-
<ComboBox Grid.Row="3" Grid.Column="3" materialDesign:TextFieldAssist.Hint="OS" Style="{StaticResource MaterialDesignFloatingHintComboBox}"
116+
<TextBox Grid.Row="4" Grid.Column="1" materialDesign:TextFieldAssist.Hint="Floating Hint"
117+
Style="{StaticResource MaterialDesignFloatingHintTextBox}"
118+
Margin="0 8 0 8"/>
119+
<ComboBox Grid.Row="4" Grid.Column="3" materialDesign:TextFieldAssist.Hint="OS" Style="{StaticResource MaterialDesignFloatingHintComboBox}"
113120
Margin="0 8 0 8">
114121
<ComboBoxItem>Andoid</ComboBoxItem>
115122
<ComboBoxItem>iOS</ComboBoxItem>
116123
<ComboBoxItem>Linux</ComboBoxItem>
117124
<ComboBoxItem>Windows</ComboBoxItem>
118125
</ComboBox>
119126

120-
<StackPanel Grid.Row="4" Grid.Column="4" Orientation="Horizontal">
121-
<ComboBox materialDesign:TextFieldAssist.Hint="Virtualisation"
122-
HorizontalAlignment="Left" Margin="16 0 0 0"
123-
ItemsSource="{Binding LongListToTestComboVirtualization}"
124-
SelectedValue="{Binding SelectedValueOne}">
125-
<ComboBox.ItemsPanel>
126-
<ItemsPanelTemplate>
127-
<VirtualizingStackPanel />
128-
</ItemsPanelTemplate>
129-
</ComboBox.ItemsPanel>
130-
</ComboBox>
131-
<ComboBox materialDesign:TextFieldAssist.Hint="Virt (editable)"
132-
HorizontalAlignment="Left" Margin="16 0 0 0"
133-
IsEditable="True"
134-
ItemsSource="{Binding LongListToTestComboVirtualization}">
135-
<ComboBox.ItemsPanel>
136-
<ItemsPanelTemplate>
137-
<VirtualizingStackPanel />
138-
</ItemsPanelTemplate>
139-
</ComboBox.ItemsPanel>
140-
</ComboBox>
141-
<ComboBox materialDesign:TextFieldAssist.Hint="Virt (float hint)"
142-
HorizontalAlignment="Left" Margin="16 0 0 0"
143-
ItemsSource="{Binding LongListToTestComboVirtualization}"
144-
Style="{StaticResource MaterialDesignFloatingHintComboBox}">
145-
<ComboBox.ItemsPanel>
146-
<ItemsPanelTemplate>
147-
<VirtualizingStackPanel />
148-
</ItemsPanelTemplate>
149-
</ComboBox.ItemsPanel>
150-
</ComboBox>
127+
<StackPanel Grid.Row="3" Grid.Column="4" Grid.RowSpan="3" Margin="32 16 0 0">
128+
<TextBlock Style="{StaticResource MaterialDesignHeadlineTextBlock}">Virtualised Comboboxes</TextBlock>
129+
<StackPanel Orientation="Horizontal" Margin="0 2 0 0">
130+
<ComboBox materialDesign:TextFieldAssist.Hint="Virtualisation"
131+
MinWidth="72"
132+
Margin="0 0 0 0"
133+
VerticalAlignment="Bottom"
134+
ItemsSource="{Binding LongListToTestComboVirtualization}"
135+
SelectedValue="{Binding SelectedValueOne}">
136+
<ComboBox.ItemsPanel>
137+
<ItemsPanelTemplate>
138+
<VirtualizingStackPanel />
139+
</ItemsPanelTemplate>
140+
</ComboBox.ItemsPanel>
141+
</ComboBox>
142+
<ComboBox materialDesign:TextFieldAssist.Hint="(editable)"
143+
MinWidth="72"
144+
Margin="16 0 0 0"
145+
VerticalAlignment="Bottom"
146+
IsEditable="True"
147+
ItemsSource="{Binding LongListToTestComboVirtualization}">
148+
<ComboBox.ItemsPanel>
149+
<ItemsPanelTemplate>
150+
<VirtualizingStackPanel />
151+
</ItemsPanelTemplate>
152+
</ComboBox.ItemsPanel>
153+
</ComboBox>
154+
<ComboBox materialDesign:TextFieldAssist.Hint="(float hint)"
155+
MinWidth="72"
156+
Margin="16 0 0 0"
157+
ItemsSource="{Binding LongListToTestComboVirtualization}"
158+
Style="{StaticResource MaterialDesignFloatingHintComboBox}">
159+
<ComboBox.ItemsPanel>
160+
<ItemsPanelTemplate>
161+
<VirtualizingStackPanel />
162+
</ItemsPanelTemplate>
163+
</ComboBox.ItemsPanel>
164+
</ComboBox>
165+
</StackPanel>
151166
</StackPanel>
152167

153-
<TextBox Grid.Row="4" Grid.Column="1" materialDesign:TextFieldAssist.Hint="Floating Hint" Style="{StaticResource MaterialDesignFloatingHintTextBox}" Text="Good stuff"
168+
<TextBox Grid.Row="5" Grid.Column="1" materialDesign:TextFieldAssist.Hint="Floating Hint" Style="{StaticResource MaterialDesignFloatingHintTextBox}" Text="Good stuff"
154169
Margin="0 8 0 8"/>
155-
<ComboBox Grid.Row="4" Grid.Column="3" materialDesign:TextFieldAssist.Hint="Search" IsEditable="True" Style="{StaticResource MaterialDesignFloatingHintComboBox}"
170+
<ComboBox Grid.Row="5" Grid.Column="3" materialDesign:TextFieldAssist.Hint="Search" IsEditable="True" Style="{StaticResource MaterialDesignFloatingHintComboBox}"
156171
Margin="0 8 0 8">
157172
<ComboBoxItem>Apple</ComboBoxItem>
158173
<ComboBoxItem>Banana</ComboBoxItem>
159174
<ComboBoxItem>Pear</ComboBoxItem>
160175
<ComboBoxItem>Orange</ComboBoxItem>
161176
</ComboBox>
162177

163-
<materialDesign:PackIcon Grid.Row="5" Grid.Column="0" Kind="Key" Foreground="{Binding ElementName=FloatingPasswordBox, Path=BorderBrush}" />
164-
<PasswordBox Grid.Row="5" Grid.Column="1"
178+
<materialDesign:PackIcon Grid.Row="6" Grid.Column="0" Kind="Key" Foreground="{Binding ElementName=FloatingPasswordBox, Path=BorderBrush}" />
179+
<PasswordBox Grid.Row="6" Grid.Column="1"
165180
x:Name="FloatingPasswordBox"
166181
materialDesign:TextFieldAssist.Hint="Floating Password" Style="{StaticResource MaterialDesignFloatingHintPasswordBox}" />
182+
183+
<TextBlock Grid.Row="7" Grid.Column="1" Style="{StaticResource MaterialDesignSubheadingTextBlock}"
184+
Margin="0 48 0 0">DataTemplate Test</TextBlock>
185+
<ContentControl Grid.Row="8" Grid.Column="1" Grid.ColumnSpan="4"
186+
Content="{Binding DemoItem}"
187+
Margin="0 4 0 0">
188+
<ContentControl.ContentTemplate>
189+
<DataTemplate DataType="domain:DemoItem">
190+
<StackPanel Orientation="Horizontal">
191+
<TextBox materialDesign:TextFieldAssist.Hint="Name" Text="{Binding Name}" Margin="0 0 0 0" VerticalAlignment="Bottom" />
192+
<TextBox materialDesign:TextFieldAssist.Hint="Content" Text="{Binding Content}" Margin="8 0 0 0" VerticalAlignment="Bottom" />
193+
<TextBox Style="{StaticResource MaterialDesignFloatingHintTextBox}" materialDesign:TextFieldAssist.Hint="Name" Text="{Binding Name}" Margin="8 0 0 0" VerticalAlignment="Bottom" />
194+
<TextBox Style="{StaticResource MaterialDesignFloatingHintTextBox}" materialDesign:TextFieldAssist.Hint="Content" Text="{Binding Content}" Margin="8 0 0 0" VerticalAlignment="Bottom" />
195+
</StackPanel>
196+
</DataTemplate>
197+
</ContentControl.ContentTemplate>
198+
</ContentControl>
199+
<TextBlock Grid.Row="9" Grid.Column="1" Grid.ColumnSpan="2" Style="{StaticResource MaterialDesignSubheadingTextBlock}"
200+
Margin="0 16 0 0">DataTemplateSelector Test</TextBlock>
201+
<ContentControl Grid.Row="10" Grid.Column="1" Grid.ColumnSpan="4"
202+
Content="{Binding DemoItem}"
203+
Margin="0 4 0 0">
204+
<ContentControl.ContentTemplateSelector>
205+
<domain1:SimpleDataTemplateSelector>
206+
<domain1:SimpleDataTemplateSelector.FixedTemplate>
207+
<DataTemplate DataType="domain:DemoItem">
208+
<StackPanel Orientation="Horizontal">
209+
<TextBox Style="{StaticResource MaterialDesignFloatingHintTextBox}" materialDesign:TextFieldAssist.Hint="Name" Text="{Binding Name}" Margin="0 0 0 0" VerticalAlignment="Bottom" />
210+
<TextBox Style="{StaticResource MaterialDesignFloatingHintTextBox}" materialDesign:TextFieldAssist.Hint="Content" Text="{Binding Content}" Margin="8 0 0 0" VerticalAlignment="Bottom" />
211+
<TextBox materialDesign:TextFieldAssist.Hint="Name" Text="{Binding Name}" Margin="8 0 0 0" VerticalAlignment="Bottom" />
212+
<TextBox materialDesign:TextFieldAssist.Hint="Content" Text="{Binding Content}" Margin="8 0 0 0" VerticalAlignment="Bottom" />
213+
</StackPanel>
214+
</DataTemplate>
215+
</domain1:SimpleDataTemplateSelector.FixedTemplate>
216+
</domain1:SimpleDataTemplateSelector>
217+
</ContentControl.ContentTemplateSelector>
218+
</ContentControl>
167219
</Grid>
168220
</UserControl>

MainDemo.Wpf/TextFields.xaml.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ public TextFields()
3232

3333
private void UserControl_Loaded(object sender, RoutedEventArgs e)
3434
{
35-
}
36-
}
37-
35+
}
3836

37+
}
3938
}

MaterialDesignThemes.Wpf/TextFieldAssist.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -288,13 +288,13 @@ private static bool RefreshState<TControl>(TControl control, Func<TControl, str
288288
if (control == null) return false;
289289
if (!control.IsVisible) return true;
290290

291-
var state = string.IsNullOrEmpty(textAccessor(control))
292-
? "MaterialDesignStateTextEmpty"
293-
: "MaterialDesignStateTextNotEmpty";
294-
295291
//yep, had to invoke post this to trigger refresh
296292
control.Dispatcher.BeginInvoke(new Action(() =>
297293
{
294+
var state = string.IsNullOrEmpty(textAccessor(control))
295+
? "MaterialDesignStateTextEmpty"
296+
: "MaterialDesignStateTextNotEmpty";
297+
298298
VisualStateManager.GoToState(control, state, false);
299299
}));
300300

0 commit comments

Comments
 (0)