IpAddressControl.xaml 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <UserControl x:Class="WpfControlLibrary.IpAddress.IpAddressControl"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5. xmlns:local="clr-namespace:WpfControlLibrary.IpAddress"
  6. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  7. Margin="10,0"
  8. d:DesignHeight="50"
  9. d:DesignWidth="800"
  10. mc:Ignorable="d"
  11. Background="White">
  12. <UserControl.Resources>
  13. <ControlTemplate x:Key="validationTemplate">
  14. <DockPanel>
  15. <TextBlock Margin="1,2"
  16. DockPanel.Dock="Right"
  17. FontSize="{DynamicResource ResourceKey=Heading4}"
  18. FontWeight="Bold"
  19. Foreground="Red"
  20. Text="" />
  21. <AdornedElementPlaceholder />
  22. </DockPanel>
  23. </ControlTemplate>
  24. <Style x:Key="CustomTextBoxTextStyle"
  25. TargetType="TextBox">
  26. <Setter Property="MaxLength"
  27. Value="3" />
  28. <Setter Property="HorizontalAlignment"
  29. Value="Stretch" />
  30. <Setter Property="VerticalAlignment"
  31. Value="Center" />
  32. <Style.Triggers>
  33. <Trigger Property="Validation.HasError"
  34. Value="True">
  35. <Trigger.Setters>
  36. <Setter Property="ToolTip"
  37. Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" />
  38. <Setter Property="BorderBrush"
  39. Value="Red" />
  40. <Setter Property="Background"
  41. Value="Red" />
  42. </Trigger.Setters>
  43. </Trigger>
  44. </Style.Triggers>
  45. </Style>
  46. </UserControl.Resources>
  47. <Grid>
  48. <Grid.ColumnDefinitions>
  49. <ColumnDefinition MinWidth="30" />
  50. <ColumnDefinition Width="10" />
  51. <ColumnDefinition MinWidth="30" />
  52. <ColumnDefinition Width="10" />
  53. <ColumnDefinition MinWidth="30" />
  54. <ColumnDefinition Width="10" />
  55. <ColumnDefinition MinWidth="30" />
  56. </Grid.ColumnDefinitions>
  57. <!-- Part 1 -->
  58. <TextBox Grid.Column="0"
  59. BorderThickness="0"
  60. HorizontalAlignment="Stretch"
  61. VerticalAlignment="Stretch"
  62. VerticalContentAlignment="Center"
  63. HorizontalContentAlignment="Center"
  64. x:Name="part1"
  65. PreviewKeyDown="Part1_PreviewKeyDown"
  66. local:FocusChangeExtension.IsFocused="{Binding IsPart1Focused, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True}"
  67. Style="{StaticResource CustomTextBoxTextStyle}"
  68. Validation.ErrorTemplate="{StaticResource validationTemplate}">
  69. <TextBox.Text>
  70. <Binding Path="Part1"
  71. UpdateSourceTrigger="PropertyChanged">
  72. <Binding.ValidationRules>
  73. <local:IPRangeValidationRule Max="255"
  74. Min="0" />
  75. </Binding.ValidationRules>
  76. </Binding>
  77. </TextBox.Text>
  78. </TextBox>
  79. <TextBlock Grid.Column="1"
  80. HorizontalAlignment="Center"
  81. FontSize="15"
  82. Text="."
  83. VerticalAlignment="Center" />
  84. <!-- Part 2 -->
  85. <TextBox Grid.Column="2"
  86. x:Name="part2"
  87. BorderThickness="0"
  88. VerticalAlignment="Stretch"
  89. VerticalContentAlignment="Center"
  90. HorizontalContentAlignment="Center"
  91. PreviewKeyDown="Part2_KeyDown"
  92. local:FocusChangeExtension.IsFocused="{Binding IsPart2Focused}"
  93. Style="{StaticResource CustomTextBoxTextStyle}"
  94. Validation.ErrorTemplate="{StaticResource validationTemplate}">
  95. <TextBox.Text>
  96. <Binding Path="Part2"
  97. UpdateSourceTrigger="PropertyChanged">
  98. <Binding.ValidationRules>
  99. <local:IPRangeValidationRule Max="255"
  100. Min="0" />
  101. </Binding.ValidationRules>
  102. </Binding>
  103. </TextBox.Text>
  104. </TextBox>
  105. <TextBlock Grid.Column="3"
  106. HorizontalAlignment="Center"
  107. FontSize="15"
  108. Text="."
  109. VerticalAlignment="Center" />
  110. <!-- Part 3 -->
  111. <TextBox Grid.Column="4"
  112. x:Name="part3"
  113. BorderThickness="0"
  114. VerticalAlignment="Stretch"
  115. VerticalContentAlignment="Center"
  116. HorizontalContentAlignment="Center"
  117. PreviewKeyDown="Part3_KeyDown"
  118. local:FocusChangeExtension.IsFocused="{Binding IsPart3Focused}"
  119. Style="{StaticResource CustomTextBoxTextStyle}"
  120. Validation.ErrorTemplate="{StaticResource validationTemplate}">
  121. <TextBox.Text>
  122. <Binding Path="Part3"
  123. UpdateSourceTrigger="PropertyChanged">
  124. <Binding.ValidationRules>
  125. <local:IPRangeValidationRule Max="255"
  126. Min="0" />
  127. </Binding.ValidationRules>
  128. </Binding>
  129. </TextBox.Text>
  130. </TextBox>
  131. <TextBlock Grid.Column="5"
  132. HorizontalAlignment="Center"
  133. FontSize="15"
  134. Text="."
  135. VerticalAlignment="Center" />
  136. <!-- Part 4 -->
  137. <TextBox Grid.Column="6"
  138. x:Name="part4"
  139. BorderThickness="0"
  140. VerticalAlignment="Stretch"
  141. VerticalContentAlignment="Center"
  142. HorizontalContentAlignment="Center"
  143. PreviewKeyDown="Part4_KeyDown"
  144. local:FocusChangeExtension.IsFocused="{Binding IsPart4Focused}"
  145. Style="{StaticResource CustomTextBoxTextStyle}"
  146. Validation.ErrorTemplate="{StaticResource validationTemplate}">
  147. <TextBox.Text>
  148. <Binding Path="Part4"
  149. UpdateSourceTrigger="PropertyChanged">
  150. <Binding.ValidationRules>
  151. <local:IPRangeValidationRule Max="255"
  152. Min="0" />
  153. </Binding.ValidationRules>
  154. </Binding>
  155. </TextBox.Text>
  156. </TextBox>
  157. </Grid>
  158. </UserControl>