MainWindow.xaml.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. using System;
  2. using System.Linq;
  3. using System.Windows;
  4. using System.Windows.Controls;
  5. using System.Windows.Controls.Primitives;
  6. using System.Windows.Input;
  7. using System.Windows.Media;
  8. using System.Windows.Media.Animation;
  9. namespace MatrixXAMLOnly
  10. {
  11. /// <summary>
  12. /// Interaction logic for MainWindow.xaml
  13. /// </summary>
  14. public partial class MainWindow : Window
  15. {
  16. Operation operation;
  17. public MainWindow()
  18. {
  19. InitializeComponent();
  20. operation = Operation.NoChosen;
  21. BtnAddition.Content = "Сложение матрицы";
  22. BtnDifference.Content = "Вычитание матрицы";
  23. BtnMultiplicationOnScalar.Content = "Умножение матрицы \nна скаляр";
  24. BtnTransposition.Content = "Транспонирование матрицы";
  25. BtnMultiplicationOnTransposed.Content = "Умножение матрицы на её \nтранспонированную матрицу";
  26. BtnRowsReplace.Content = "Перестановка строк";
  27. BtnRowsReplaceOnTranspositionVector.Content = "Перестановка строк согласно \nвектору транспозиции";
  28. BtnInverse.Content = "Обратная матрицы";
  29. }
  30. private void BtnHamburgerMenu_Click(object sender, RoutedEventArgs e)
  31. {
  32. DoubleAnimation menuAnimation = new DoubleAnimation();
  33. menuAnimation.From = CurtainMenu.ActualWidth;
  34. menuAnimation.DecelerationRatio = 1.0;
  35. if (menuAnimation.From == 250)
  36. {
  37. menuAnimation.To = 0;
  38. menuAnimation.Duration = TimeSpan.FromSeconds(0.2);
  39. }
  40. else
  41. {
  42. menuAnimation.To = 250;
  43. menuAnimation.Duration = TimeSpan.FromSeconds(0.2);
  44. }
  45. CurtainMenu.BeginAnimation(WidthProperty, menuAnimation);
  46. }
  47. private Grid CreateMatrix(int a, int b)
  48. {
  49. Grid matrixGrid = new Grid();
  50. matrixGrid.Margin = new Thickness(25, 75, 25, 75);
  51. // Добавление колонок
  52. for (int i = 0; i < a; i++)
  53. {
  54. matrixGrid.ColumnDefinitions.Add(new ColumnDefinition());
  55. }
  56. // Добавление строк
  57. for (int j = 0; j < b; j++)
  58. {
  59. matrixGrid.RowDefinitions.Add(new RowDefinition());
  60. }
  61. // Добавление TextBox'ов
  62. int tabCounter = 1;
  63. for (int i = 0; i < a; i++)
  64. {
  65. for (int j = 0; j < b; j++)
  66. {
  67. TextBox textBox = new TextBox()
  68. {
  69. HorizontalContentAlignment = HorizontalAlignment.Center,
  70. VerticalContentAlignment = VerticalAlignment.Center,
  71. TabIndex = tabCounter
  72. };
  73. tabCounter++;
  74. textBox.KeyDown += TextBox_KeyDown;
  75. Grid.SetColumn(textBox, j);
  76. Grid.SetRow(textBox, i);
  77. matrixGrid.Children.Add(textBox);
  78. }
  79. }
  80. return matrixGrid;
  81. }
  82. private void TextBox_KeyDown(object sender, KeyEventArgs e)
  83. {
  84. if (e.Key == Key.W ||
  85. e.Key == Key.A ||
  86. e.Key == Key.S ||
  87. e.Key == Key.D ||
  88. e.Key == Key.Tab)
  89. {
  90. e.Handled = true;
  91. FocusOnNext((TextBox)sender, e.Key);
  92. return;
  93. }
  94. if (e.Key != Key.NumPad0 && e.Key != Key.D0 &&
  95. e.Key != Key.NumPad1 && e.Key != Key.D1 &&
  96. e.Key != Key.NumPad2 && e.Key != Key.D2 &&
  97. e.Key != Key.NumPad3 && e.Key != Key.D3 &&
  98. e.Key != Key.NumPad4 && e.Key != Key.D4 &&
  99. e.Key != Key.NumPad5 && e.Key != Key.D5 &&
  100. e.Key != Key.NumPad6 && e.Key != Key.D6 &&
  101. e.Key != Key.NumPad7 && e.Key != Key.D7 &&
  102. e.Key != Key.NumPad8 && e.Key != Key.D8 &&
  103. e.Key != Key.NumPad9 && e.Key != Key.D9)
  104. {
  105. e.Handled = true;
  106. }
  107. }
  108. private void FocusOnNext(TextBox tb, Key KeyArg)
  109. {
  110. Grid matrixGrid = (Grid)tb.Parent;
  111. int columns = matrixGrid.ColumnDefinitions.Count;
  112. int rows = matrixGrid.RowDefinitions.Count;
  113. int element = tb.TabIndex;
  114. if (((int)KeyArg) == 40 || KeyArg == Key.S)
  115. {
  116. element += rows;
  117. }
  118. else if ((int)KeyArg == 38 || KeyArg == Key.W)
  119. {
  120. element -= rows;
  121. }
  122. else if ((int)KeyArg == 37 || KeyArg == Key.A)
  123. {
  124. element -= 1;
  125. }
  126. else if ((int)KeyArg == 39 || KeyArg == Key.D || KeyArg == Key.Tab)
  127. {
  128. element += 1;
  129. }
  130. else
  131. {
  132. return;
  133. }
  134. int counter = 0;
  135. for (int i = 0; i < columns; i++)
  136. {
  137. for (int j = 0; j < rows; j++)
  138. {
  139. counter++;
  140. if (element == counter)
  141. {
  142. matrixGrid.Children.Cast<TextBox>().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Focus();
  143. }
  144. }
  145. }
  146. }
  147. #region HumburgerMenuItems
  148. private void BtnAddition_Click(object sender, RoutedEventArgs e)
  149. {
  150. GridContentAddition.Visibility = Visibility.Visible;
  151. GridContentDifference.Visibility = Visibility.Collapsed;
  152. GridContentMultiplication.Visibility = Visibility.Collapsed;
  153. GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
  154. GridContentRowsReplace.Visibility = Visibility.Collapsed;
  155. GridContentTranspose.Visibility = Visibility.Collapsed;
  156. // GridContentRowReplaceOnTranspositionVector;
  157. // GridContentInverse;
  158. GridAdditionFrstTerm.Children.Add(CreateMatrix(5, 5));
  159. GridAdditionScndTerm.Children.Add(CreateMatrix(5, 5));
  160. GridAdditionResult.Children.Add(CreateMatrix(5, 5));
  161. }
  162. private void BtnDifference_Click(object sender, RoutedEventArgs e)
  163. {
  164. GridContentAddition.Visibility = Visibility.Collapsed;
  165. GridContentDifference.Visibility = Visibility.Visible;
  166. GridContentMultiplication.Visibility = Visibility.Collapsed;
  167. GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
  168. GridContentRowsReplace.Visibility = Visibility.Collapsed;
  169. GridContentTranspose.Visibility = Visibility.Collapsed;
  170. // GridContentRowReplaceOnTranspositionVector;
  171. // GridContentInverse;
  172. GridDifferenceFrstTerm.Children.Add(CreateMatrix(5, 5));
  173. GridDifferenceScndTerm.Children.Add(CreateMatrix(5, 5));
  174. GridDifferenceResult.Children.Add(CreateMatrix(5, 5));
  175. }
  176. private void BtnMultiplicationOnScalar_Click(object sender, RoutedEventArgs e)
  177. {
  178. GridContentAddition.Visibility = Visibility.Collapsed;
  179. GridContentDifference.Visibility = Visibility.Collapsed;
  180. GridContentMultiplication.Visibility = Visibility.Visible;
  181. GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
  182. GridContentRowsReplace.Visibility = Visibility.Collapsed;
  183. GridContentTranspose.Visibility = Visibility.Collapsed;
  184. // GridContentRowReplaceOnTranspositionVector;
  185. // GridContentInverse;
  186. GridMultiplicationOnScalarFrstTerm.Children.Add(CreateMatrix(5, 5));
  187. GridMultiplicationOnScalarResult.Children.Add(CreateMatrix(5, 5));
  188. }
  189. private void BtnTransposition_Click(object sender, RoutedEventArgs e)
  190. {
  191. GridContentAddition.Visibility = Visibility.Collapsed;
  192. GridContentDifference.Visibility = Visibility.Collapsed;
  193. GridContentMultiplication.Visibility = Visibility.Collapsed;
  194. GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
  195. GridContentRowsReplace.Visibility = Visibility.Collapsed;
  196. GridContentTranspose.Visibility = Visibility.Visible;
  197. // GridContentRowReplaceOnTranspositionVector;
  198. // GridContentInverse;
  199. GridTransposeFrom.Children.Add(CreateMatrix(3, 5));
  200. GridTransposed.Children.Add(CreateMatrix(5, 3));
  201. }
  202. private void BtnMultiplicationOnTransposed_Click(object sender, RoutedEventArgs e)
  203. {
  204. GridContentAddition.Visibility = Visibility.Collapsed;
  205. GridContentDifference.Visibility = Visibility.Collapsed;
  206. GridContentMultiplication.Visibility = Visibility.Collapsed;
  207. GridContentMultiplicationOnTransposed.Visibility = Visibility.Visible;
  208. GridContentRowsReplace.Visibility = Visibility.Collapsed;
  209. GridContentTranspose.Visibility = Visibility.Collapsed;
  210. // GridContentRowReplaceOnTranspositionVector;
  211. // GridContentInverse;
  212. }
  213. private void BtnRowsReplace_Click(object sender, RoutedEventArgs e)
  214. {
  215. GridContentAddition.Visibility = Visibility.Collapsed;
  216. GridContentDifference.Visibility = Visibility.Collapsed;
  217. GridContentMultiplication.Visibility = Visibility.Collapsed;
  218. GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
  219. GridContentRowsReplace.Visibility = Visibility.Visible;
  220. GridContentTranspose.Visibility = Visibility.Collapsed;
  221. // GridContentRowReplaceOnTranspositionVector;
  222. // GridContentInverse;
  223. }
  224. private void BtnInverse_Click(object sender, RoutedEventArgs e)
  225. {
  226. GridContentAddition.Visibility = Visibility.Collapsed;
  227. GridContentDifference.Visibility = Visibility.Collapsed;
  228. GridContentMultiplication.Visibility = Visibility.Collapsed;
  229. GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
  230. GridContentRowsReplace.Visibility = Visibility.Collapsed;
  231. GridContentTranspose.Visibility = Visibility.Collapsed;
  232. // GridContentRowReplaceOnTranspositionVector;
  233. // GridContentInverse;
  234. }
  235. private void BtnRowsReplaceOnTranspositionVector_Click(object sender, RoutedEventArgs e)
  236. {
  237. GridContentAddition.Visibility = Visibility.Collapsed;
  238. GridContentDifference.Visibility = Visibility.Collapsed;
  239. GridContentMultiplication.Visibility = Visibility.Collapsed;
  240. GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
  241. GridContentRowsReplace.Visibility = Visibility.Collapsed;
  242. GridContentTranspose.Visibility = Visibility.Collapsed;
  243. // GridContentRowReplaceOnTranspositionVector;
  244. // GridContentInverse;
  245. }
  246. #endregion
  247. }
  248. enum Operation
  249. {
  250. Addition,
  251. Difference,
  252. MultiplicationOnScalar,
  253. Transposition,
  254. MultiplicationOnTransposed,
  255. RowReplace,
  256. RowReplaceOnTranspositionVector,
  257. Inverse,
  258. NoChosen
  259. }
  260. }