Skip to content

Commit 02b9746

Browse files
authored
Merge pull request #435 from AvaloniaCommunity/comboboxesErrors
Add validation support for ComboBoxes. Fixes #166
2 parents 2b4a2ad + 8900c72 commit 02b9746

File tree

2 files changed

+110
-94
lines changed

2 files changed

+110
-94
lines changed

Material.Avalonia.Demo/Pages/ComboBoxesDemo.axaml

Lines changed: 59 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -5,53 +5,66 @@
55
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
66
xmlns:showMeTheXaml="clr-namespace:ShowMeTheXaml;assembly=ShowMeTheXaml.Avalonia"
77
xmlns:assist="clr-namespace:Material.Styles.Assists;assembly=Material.Styles"
8+
xmlns:system="clr-namespace:System;assembly=System.Runtime"
89
x:Class="Material.Avalonia.Demo.Pages.ComboBoxesDemo">
9-
<StackPanel Margin="16, 0" HorizontalAlignment="Stretch">
10-
<TextBlock Classes="Headline4 Subheadline" Text="ComboBoxes" />
10+
<StackPanel Margin="16, 0" HorizontalAlignment="Stretch">
11+
<TextBlock Classes="Headline4 Subheadline" Text="ComboBoxes" />
1112

12-
<WrapPanel HorizontalAlignment="Stretch">
13-
<StackPanel>
14-
<TextBlock Classes="Headline6 Subheadline2" Text="Standard comboboxes" />
15-
<StackPanel Orientation="Horizontal">
16-
<StackPanel.Styles>
17-
<Style Selector="ComboBox">
18-
<Setter Property="Width" Value="180" />
19-
</Style>
20-
</StackPanel.Styles>
21-
<showMeTheXaml:XamlDisplay UniqueId="ComboBoxes0">
22-
<ComboBox PlaceholderText="Select a Item">
23-
<TextBlock Text="Item 1" />
24-
<TextBlock Text="Item 2" />
25-
<TextBlock Text="Item 3" />
26-
<TextBlock Text="Item 4" />
27-
</ComboBox>
28-
</showMeTheXaml:XamlDisplay>
29-
<showMeTheXaml:XamlDisplay UniqueId="ComboBoxes1">
30-
<ComboBox PlaceholderText="Select a Item">
31-
<TextBlock Text="Item 1" />
32-
<TextBlock Text="Item 2" />
33-
<TextBlock Text="Item 3" />
34-
<TextBlock Text="Item 4" />
35-
</ComboBox>
36-
</showMeTheXaml:XamlDisplay>
37-
<showMeTheXaml:XamlDisplay UniqueId="ComboBoxes2">
38-
<ComboBox Theme="{StaticResource MaterialFilledComboBox}">
39-
<TextBlock Text="Item 1" />
40-
<TextBlock Text="Item 2" />
41-
<TextBlock Text="Item 3" />
42-
<TextBlock Text="Item 4" />
43-
</ComboBox>
44-
</showMeTheXaml:XamlDisplay>
45-
<showMeTheXaml:XamlDisplay UniqueId="ComboBoxes3">
46-
<ComboBox Theme="{StaticResource MaterialOutlineComboBox}" assist:ComboBoxAssist.Label="ComboBox">
47-
<TextBlock Text="Item 1" />
48-
<TextBlock Text="Item 2" />
49-
<TextBlock Text="Item 3" />
50-
<TextBlock Text="Item 4" />
51-
</ComboBox>
52-
</showMeTheXaml:XamlDisplay>
53-
</StackPanel>
54-
</StackPanel>
13+
<WrapPanel HorizontalAlignment="Stretch">
14+
<StackPanel>
15+
<TextBlock Classes="Headline6 Subheadline2" Text="Standard comboboxes" />
16+
<WrapPanel Orientation="Horizontal">
17+
<WrapPanel.Styles>
18+
<Style Selector="ComboBox">
19+
<Setter Property="Width" Value="180" />
20+
</Style>
21+
</WrapPanel.Styles>
22+
<showMeTheXaml:XamlDisplay UniqueId="ComboBoxes0">
23+
<ComboBox PlaceholderText="Select a Item">
24+
<TextBlock Text="Item 1" />
25+
<TextBlock Text="Item 2" />
26+
<TextBlock Text="Item 3" />
27+
<TextBlock Text="Item 4" />
28+
</ComboBox>
29+
</showMeTheXaml:XamlDisplay>
30+
<showMeTheXaml:XamlDisplay UniqueId="ComboBoxes1">
31+
<ComboBox PlaceholderText="Select a Item">
32+
<TextBlock Text="Item 1" />
33+
<TextBlock Text="Item 2" />
34+
<TextBlock Text="Item 3" />
35+
<TextBlock Text="Item 4" />
36+
</ComboBox>
37+
</showMeTheXaml:XamlDisplay>
38+
<showMeTheXaml:XamlDisplay UniqueId="ComboBoxes2">
39+
<ComboBox Theme="{StaticResource MaterialFilledComboBox}">
40+
<TextBlock Text="Item 1" />
41+
<TextBlock Text="Item 2" />
42+
<TextBlock Text="Item 3" />
43+
<TextBlock Text="Item 4" />
44+
</ComboBox>
45+
</showMeTheXaml:XamlDisplay>
46+
<showMeTheXaml:XamlDisplay UniqueId="ComboBoxes3">
47+
<ComboBox Theme="{StaticResource MaterialOutlineComboBox}" assist:ComboBoxAssist.Label="ComboBox">
48+
<TextBlock Text="Item 1" />
49+
<TextBlock Text="Item 2" />
50+
<TextBlock Text="Item 3" />
51+
<TextBlock Text="Item 4" />
52+
</ComboBox>
53+
</showMeTheXaml:XamlDisplay>
54+
55+
<showMeTheXaml:XamlDisplay UniqueId="ComboBoxesError">
56+
<ComboBox PlaceholderText="Select a Item">
57+
<TextBlock Text="Item 1" />
58+
<TextBlock Text="Item 2" />
59+
<TextBlock Text="Item 3" />
60+
<TextBlock Text="Item 4" />
61+
<DataValidationErrors.Error>
62+
<system:Exception />
63+
</DataValidationErrors.Error>
64+
</ComboBox>
65+
</showMeTheXaml:XamlDisplay>
5566
</WrapPanel>
56-
</StackPanel>
67+
</StackPanel>
68+
</WrapPanel>
69+
</StackPanel>
5770
</UserControl>

Material.Styles/Resources/Themes/ComboBox.axaml

Lines changed: 51 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -50,63 +50,66 @@
5050
BorderBrush="{TemplateBinding BorderBrush}"
5151
BorderThickness="{TemplateBinding BorderThickness}"
5252
CornerRadius="{TemplateBinding CornerRadius}">
53-
<Panel Name="PART_RootPanel">
54-
<Grid ColumnDefinitions="*, Auto">
55-
<Panel Grid.Column="0">
56-
<Border Name="PART_BackgroundField" />
53+
<DataValidationErrors Name="PART_DataValidation">
54+
<Panel Name="PART_RootPanel">
55+
<Grid ColumnDefinitions="*, Auto">
56+
<Panel Grid.Column="0">
57+
<Border Name="PART_BackgroundField" />
5758

58-
<Panel Name="PART_InnerPanel" HorizontalAlignment="Left">
59-
<TextBlock Name="PART_PlaceholderText"
60-
Text="{TemplateBinding PlaceholderText}"
61-
Foreground="{TemplateBinding PlaceholderForeground}" />
59+
<Panel Name="PART_InnerPanel" HorizontalAlignment="Left">
60+
<TextBlock Name="PART_PlaceholderText"
61+
Text="{TemplateBinding PlaceholderText}"
62+
Foreground="{TemplateBinding PlaceholderForeground}" />
6263

63-
<ContentPresenter Name="PART_ContentPresenter"
64-
Content="{TemplateBinding SelectionBoxItem}"
65-
ContentTemplate="{TemplateBinding ItemTemplate}" />
64+
<ContentPresenter Name="PART_ContentPresenter"
65+
Content="{TemplateBinding SelectionBoxItem}"
66+
ContentTemplate="{TemplateBinding ItemTemplate}" />
67+
</Panel>
68+
69+
<Border Name="PART_LabelRootBorder">
70+
<TextBlock Name="PART_LabelText"
71+
Text="{TemplateBinding (assists:ComboBoxAssist.Label)}" />
72+
</Border>
6673
</Panel>
6774

68-
<Border Name="PART_LabelRootBorder">
69-
<TextBlock Name="PART_LabelText"
70-
Text="{TemplateBinding (assists:ComboBoxAssist.Label)}" />
75+
<Border Name="splitBorder"
76+
Grid.Column="1"
77+
Margin="16 8"
78+
HorizontalAlignment="Right"
79+
VerticalAlignment="Center"
80+
BorderBrush="Transparent"
81+
BorderThickness="0">
82+
<Path Name="arrow"
83+
Width="8" Height="8"
84+
Stretch="Uniform"
85+
HorizontalAlignment="Right"
86+
VerticalAlignment="Center"
87+
Data="M7,10L12,15L17,10H7Z"
88+
Fill="{DynamicResource MaterialTextBoxBorderBrush}" />
7189
</Border>
72-
</Panel>
90+
</Grid>
7391

74-
<Border Name="splitBorder"
75-
Grid.Column="1"
76-
Margin="16 8"
77-
HorizontalAlignment="Right"
78-
VerticalAlignment="Center"
79-
BorderBrush="Transparent"
80-
BorderThickness="0">
81-
<Path Name="arrow"
82-
Width="8" Height="8"
83-
Stretch="Uniform"
84-
HorizontalAlignment="Right"
85-
VerticalAlignment="Center"
86-
Data="M7,10L12,15L17,10H7Z"
87-
Fill="{DynamicResource MaterialTextBoxBorderBrush}" />
88-
</Border>
89-
</Grid>
9092

93+
<controls:MaterialUnderline Name="PART_Underline"
94+
Theme="{StaticResource MaterialUnderlineY}" />
9195

92-
<controls:MaterialUnderline Name="PART_Underline"
93-
Theme="{StaticResource MaterialUnderlineY}" />
94-
95-
<Panel Name="PART_PopupContainer">
96-
<Popup Name="PART_Popup"
97-
IsLightDismissEnabled="True"
98-
IsOpen="{TemplateBinding IsDropDownOpen, Mode=TwoWay}">
99-
<controls:Card Name="PART_Card"
100-
MaxHeight="{TemplateBinding MaxDropDownHeight}"
101-
MinWidth="{Binding Bounds.Width, RelativeSource={RelativeSource TemplatedParent}}">
102-
<ScrollViewer Name="PART_ScrollViewer">
103-
<ItemsPresenter Name="PART_ItemsPresenter"
104-
ItemsPanel="{TemplateBinding ItemsPanel}" />
105-
</ScrollViewer>
106-
</controls:Card>
107-
</Popup>
96+
<Panel Name="PART_PopupContainer">
97+
<Popup Name="PART_Popup"
98+
IsLightDismissEnabled="True"
99+
IsOpen="{TemplateBinding IsDropDownOpen, Mode=TwoWay}">
100+
<controls:Card Name="PART_Card"
101+
MaxHeight="{TemplateBinding MaxDropDownHeight}"
102+
MinWidth="{Binding Bounds.Width, RelativeSource={RelativeSource TemplatedParent}}">
103+
<ScrollViewer Name="PART_ScrollViewer">
104+
<ItemsPresenter Name="PART_ItemsPresenter"
105+
ItemsPanel="{TemplateBinding ItemsPanel}" />
106+
</ScrollViewer>
107+
</controls:Card>
108+
</Popup>
109+
</Panel>
108110
</Panel>
109-
</Panel>
111+
112+
</DataValidationErrors>
110113
</Border>
111114
</ControlTemplate>
112115
</Setter>

0 commit comments

Comments
 (0)