1+ <simpleChildWindow : ChildWindow x : Class =" NETworkManager.Views.ServerConnectionInfoProfileChildWindow"
2+ xmlns =" http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3+ xmlns : x =" http://schemas.microsoft.com/winfx/2006/xaml"
4+ xmlns : mc =" http://schemas.openxmlformats.org/markup-compatibility/2006"
5+ xmlns : d =" http://schemas.microsoft.com/expression/blend/2008"
6+ xmlns : validators =" clr-namespace:NETworkManager.Validators;assembly=NETworkManager.Validators"
7+ xmlns : wpfHelpers =" clr-namespace:NETworkManager.Utilities.WPF;assembly=NETworkManager.Utilities.WPF"
8+ xmlns : controls =" clr-namespace:NETworkManager.Controls;assembly=NETworkManager.Controls"
9+ xmlns : network =" clr-namespace:NETworkManager.Models.Network;assembly=NETworkManager.Models"
10+ xmlns : mah =" http://metro.mahapps.com/winfx/xaml/controls"
11+ xmlns : viewModels =" clr-namespace:NETworkManager.ViewModels"
12+ xmlns : iconPacks =" http://metro.mahapps.com/winfx/xaml/iconpacks"
13+ xmlns : localization =" clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
14+ xmlns : interactivity =" http://schemas.microsoft.com/xaml/behaviors"
15+ xmlns : converters =" clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
16+ xmlns : simpleChildWindow =" clr-namespace:MahApps.Metro.SimpleChildWindow;assembly=MahApps.Metro.SimpleChildWindow"
17+ CloseButtonCommand =" {Binding Path=CancelCommand}"
18+ Style =" {StaticResource DefaultChildWindow}"
19+ Loaded =" ChildWindow_OnLoaded"
20+ mc : Ignorable =" d" d : DataContext =" {d:DesignInstance viewModels:ServerConnectionInfoProfileViewModel}" >
21+ <Grid Margin =" 10" >
22+ <Grid .RowDefinitions>
23+ <RowDefinition Height =" Auto" />
24+ <RowDefinition Height =" 10" />
25+ <RowDefinition Height =" *" />
26+ <RowDefinition Height =" 10" />
27+ <RowDefinition Height =" Auto" />
28+ <RowDefinition Height =" 10" />
29+ <RowDefinition Height =" Auto" />
30+ </Grid .RowDefinitions>
31+ <Grid Grid.Row=" 0" >
32+ <Grid .Resources>
33+ <Style TargetType =" {x:Type TextBlock}" BasedOn =" {StaticResource CenterTextBlock}" />
34+ <Style TargetType =" {x:Type TextBox}" BasedOn =" {StaticResource DefaultTextBox}" />
35+ </Grid .Resources>
36+ <Grid .ColumnDefinitions>
37+ <ColumnDefinition Width =" 1*" />
38+ <ColumnDefinition Width =" 10" />
39+ <ColumnDefinition Width =" 1*" />
40+ </Grid .ColumnDefinitions>
41+ <Grid .RowDefinitions>
42+ <RowDefinition Height =" Auto" />
43+ </Grid .RowDefinitions>
44+ <TextBlock Grid.Column=" 0" Grid.Row=" 0" Text =" {x:Static localization:Strings.Name}" />
45+ <TextBox x : Name =" TextBoxName" Grid.Column=" 2" Grid.Row=" 0"
46+ mah:TextBoxHelper.Watermark=" {x:Static localization:StaticStrings.ExampleGroupServers}" >
47+ <TextBox .Resources>
48+ <wpfHelpers : BindingProxy x : Key =" BindingProxy" Data =" {Binding}" />
49+ </TextBox .Resources>
50+ <TextBox .Text>
51+ <Binding Path =" Name" Mode =" TwoWay" UpdateSourceTrigger =" PropertyChanged" >
52+ <Binding .ValidationRules>
53+ <validators : EmptyValidator ValidatesOnTargetUpdated =" True" />
54+ <validators : IsNameUnique ValidatesOnTargetUpdated =" True" >
55+ <validators : IsNameUnique .Wrapper>
56+ <validators : IsNameUniqueDependencyObjectWrapper
57+ UsedNames =" {Binding Data.UsedNames, Source={StaticResource BindingProxy}}" />
58+ </validators : IsNameUnique .Wrapper>
59+ </validators : IsNameUnique >
60+ </Binding .ValidationRules>
61+ </Binding >
62+ </TextBox .Text>
63+ </TextBox >
64+ </Grid >
65+ <controls : MultiSelectDataGrid x : Name =" DataGridServers" Grid.Column=" 0" Grid.Row=" 2"
66+ ItemsSource =" {Binding Servers}"
67+ SelectedItemsList =" {Binding SelectedServers, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
68+ <controls : MultiSelectDataGrid .Resources>
69+ <ContextMenu x : Key =" ContextMenu" Opened =" ContextMenu_Opened" MinWidth =" 150" >
70+ <MenuItem Header =" {x:Static localization:Strings.Delete}" Command =" {Binding DeleteServerCommand}" >
71+ <MenuItem .Icon>
72+ <Rectangle Width =" 16" Height =" 16" Fill =" {DynamicResource MahApps.Brushes.Gray3}" >
73+ <Rectangle .OpacityMask>
74+ <VisualBrush Stretch =" Uniform" Visual =" {iconPacks:Material Kind=Close}" />
75+ </Rectangle .OpacityMask>
76+ </Rectangle >
77+ </MenuItem .Icon>
78+ </MenuItem >
79+ </ContextMenu >
80+ </controls : MultiSelectDataGrid .Resources>
81+ <controls : MultiSelectDataGrid .Columns>
82+ <DataGridTextColumn Header =" {x:Static localization:Strings.Server}"
83+ Binding =" {Binding (network:ServerConnectionInfo.Server)}"
84+ SortMemberPath =" Server"
85+ Width =" 250" />
86+ <DataGridTextColumn Header =" {x:Static localization:Strings.Port}"
87+ SortMemberPath =" Port"
88+ Binding =" {Binding (network:ServerConnectionInfo.Port)}"
89+ Width =" *" />
90+ </controls : MultiSelectDataGrid .Columns>
91+ <controls : MultiSelectDataGrid .InputBindings>
92+ <KeyBinding Command =" {Binding DeleteServerCommand}" Key =" Delete" />
93+ </controls : MultiSelectDataGrid .InputBindings>
94+ <controls : MultiSelectDataGrid .RowStyle>
95+ <Style TargetType =" {x:Type DataGridRow}" BasedOn =" {StaticResource MahApps.Styles.DataGridRow}" >
96+ <Setter Property =" ContextMenu" Value =" {StaticResource ContextMenu}" />
97+ </Style >
98+ </controls : MultiSelectDataGrid .RowStyle>
99+ </controls : MultiSelectDataGrid >
100+ <Grid Grid.Column=" 0" Grid.Row=" 4" >
101+ <Grid .ColumnDefinitions>
102+ <ColumnDefinition Width =" 240" />
103+ <ColumnDefinition Width =" 10" />
104+ <ColumnDefinition Width =" *" />
105+ <ColumnDefinition Width =" 10" />
106+ <ColumnDefinition Width =" Auto" />
107+ </Grid .ColumnDefinitions>
108+ <TextBox x : Name =" TextBoxServer" Grid.Column=" 0" Grid.Row=" 0"
109+ mah:TextBoxHelper.Watermark=" {Binding ServerWatermark}" >
110+ <TextBox .Resources>
111+ <wpfHelpers : BindingProxy x : Key =" BindingProxy" Data =" {Binding}" />
112+ </TextBox .Resources>
113+ <TextBox .Text>
114+ <Binding Path =" Server" Mode =" TwoWay" UpdateSourceTrigger =" PropertyChanged" >
115+ <Binding .ValidationRules>
116+ <validators : EmptyValidator ValidatesOnTargetUpdated =" True" />
117+ <validators : ServerValidator ValidatesOnTargetUpdated =" True" >
118+ <validators : ServerValidator .Wrapper>
119+ <validators : ServerDependencyObjectWrapper
120+ AllowOnlyIPAddress =" {Binding Data.AllowOnlyIPAddress, Source={StaticResource BindingProxy}}" />
121+ </validators : ServerValidator .Wrapper>
122+ </validators : ServerValidator >
123+ </Binding .ValidationRules>
124+ </Binding >
125+ </TextBox .Text>
126+ </TextBox >
127+ <TextBox x : Name =" TextBoxPort" Grid.Column=" 2" Grid.Row=" 0"
128+ mah:TextBoxHelper.Watermark=" {Binding PortWatermark}" >
129+ <TextBox .Text>
130+ <Binding Path =" Port" Mode =" TwoWay" UpdateSourceTrigger =" PropertyChanged" >
131+ <Binding .ValidationRules>
132+ <validators : PortValidator ValidatesOnTargetUpdated =" True" />
133+ </Binding .ValidationRules>
134+ </Binding >
135+ </TextBox .Text>
136+ </TextBox >
137+ <Button Grid.Column=" 4" Grid.Row=" 0" Command =" {Binding AddServerCommand}"
138+ ToolTip =" {x:Static localization:Strings.AddServer}" >
139+ <Button .Resources>
140+ <Style TargetType =" {x:Type Button}" BasedOn =" {StaticResource ImageButton}" >
141+ <Setter Property =" MinHeight" Value =" 0" />
142+ <Setter Property =" MinWidth" Value =" 0" />
143+ <Setter Property =" Width" Value =" {Binding ElementName=TextBoxPort, Path=ActualHeight}" />
144+ <Setter Property =" Height" Value =" {Binding ElementName=TextBoxPort, Path=ActualHeight}" />
145+ <Style .Triggers>
146+ <MultiDataTrigger >
147+ <MultiDataTrigger .Conditions>
148+ <Condition
149+ Binding =" {Binding Path=(Validation.HasError), ElementName=TextBoxServer}"
150+ Value =" True" />
151+ </MultiDataTrigger .Conditions>
152+ <MultiDataTrigger .Setters>
153+ <Setter Property =" IsEnabled" Value =" False" />
154+ </MultiDataTrigger .Setters>
155+ </MultiDataTrigger >
156+ <MultiDataTrigger >
157+ <MultiDataTrigger .Conditions>
158+ <Condition Binding =" {Binding Path=(Validation.HasError), ElementName=TextBoxPort}"
159+ Value =" True" />
160+ </MultiDataTrigger .Conditions>
161+ <MultiDataTrigger .Setters>
162+ <Setter Property =" IsEnabled" Value =" False" />
163+ </MultiDataTrigger .Setters>
164+ </MultiDataTrigger >
165+ </Style .Triggers>
166+ </Style >
167+ </Button .Resources>
168+ <Rectangle Width =" 16" Height =" 16" Fill =" {DynamicResource MahApps.Brushes.Gray3}" >
169+ <Rectangle .OpacityMask>
170+ <VisualBrush Stretch =" Uniform" Visual =" {iconPacks:Material Kind=Plus}" />
171+ </Rectangle .OpacityMask>
172+ </Rectangle >
173+ </Button >
174+ </Grid >
175+ <StackPanel Grid.Column=" 0" Grid.Row=" 6" Orientation =" Horizontal" HorizontalAlignment =" Right" MinWidth =" 80" >
176+ <Button Content =" {x:Static localization:Strings.Save}" Command =" {Binding SaveCommand}" IsDefault =" True"
177+ Margin =" 0,0,10,0" >
178+ <Button .Style>
179+ <Style TargetType =" {x:Type Button}" BasedOn =" {StaticResource HighlightedButton}" >
180+ <Style .Triggers>
181+ <MultiDataTrigger >
182+ <MultiDataTrigger .Conditions>
183+ <Condition Binding =" {Binding Path=(Validation.HasError), ElementName=TextBoxName}"
184+ Value =" True" />
185+ </MultiDataTrigger .Conditions>
186+ <MultiDataTrigger .Setters>
187+ <Setter Property =" IsEnabled" Value =" False" />
188+ </MultiDataTrigger .Setters>
189+ </MultiDataTrigger >
190+ <MultiDataTrigger >
191+ <MultiDataTrigger .Conditions>
192+ <Condition Binding =" {Binding Path=Servers.Count}" Value =" 0" />
193+ </MultiDataTrigger .Conditions>
194+ <MultiDataTrigger .Setters>
195+ <Setter Property =" IsEnabled" Value =" False" />
196+ </MultiDataTrigger .Setters>
197+ </MultiDataTrigger >
198+ </Style .Triggers>
199+ </Style >
200+ </Button .Style>
201+ </Button >
202+ <Button Content =" {x:Static localization:Strings.Cancel}" Command =" {Binding CancelCommand}" IsCancel =" True"
203+ Style =" {StaticResource DefaultButton}" />
204+ </StackPanel >
205+ </Grid >
206+ </simpleChildWindow : ChildWindow >
0 commit comments