123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- using System;
- using System.Linq;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Controls.Primitives;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Animation;
- namespace MatrixXAMLOnly
- {
- /// <summary>
- /// Interaction logic for MainWindow.xaml
- /// </summary>
- public partial class MainWindow : Window
- {
- Operation operation;
- public MainWindow()
- {
- InitializeComponent();
- operation = Operation.NoChosen;
- BtnAddition.Content = "Сложение матрицы";
- BtnDifference.Content = "Вычитание матрицы";
- BtnMultiplicationOnScalar.Content = "Умножение матрицы \nна скаляр";
- BtnTransposition.Content = "Транспонирование матрицы";
- BtnMultiplicationOnTransposed.Content = "Умножение матрицы на её \nтранспонированную матрицу";
- BtnRowsReplace.Content = "Перестановка строк";
- BtnRowsReplaceOnTranspositionVector.Content = "Перестановка строк согласно \nвектору транспозиции";
- BtnInverse.Content = "Обратная матрицы";
- }
- private void BtnHamburgerMenu_Click(object sender, RoutedEventArgs e)
- {
- DoubleAnimation menuAnimation = new DoubleAnimation();
- menuAnimation.From = CurtainMenu.ActualWidth;
- menuAnimation.DecelerationRatio = 1.0;
- if (menuAnimation.From == 250)
- {
- menuAnimation.To = 0;
- menuAnimation.Duration = TimeSpan.FromSeconds(0.2);
- }
- else
- {
- menuAnimation.To = 250;
- menuAnimation.Duration = TimeSpan.FromSeconds(0.2);
- }
- CurtainMenu.BeginAnimation(WidthProperty, menuAnimation);
- }
- private Grid CreateMatrix(int a, int b)
- {
- Grid matrixGrid = new Grid();
- matrixGrid.Margin = new Thickness(25, 75, 25, 75);
- // Добавление колонок
- for (int i = 0; i < a; i++)
- {
- matrixGrid.ColumnDefinitions.Add(new ColumnDefinition());
- }
- // Добавление строк
- for (int j = 0; j < b; j++)
- {
- matrixGrid.RowDefinitions.Add(new RowDefinition());
- }
- // Добавление TextBox'ов
- int tabCounter = 1;
- for (int i = 0; i < a; i++)
- {
- for (int j = 0; j < b; j++)
- {
- TextBox textBox = new TextBox()
- {
- HorizontalContentAlignment = HorizontalAlignment.Center,
- VerticalContentAlignment = VerticalAlignment.Center,
- TabIndex = tabCounter
- };
- tabCounter++;
- textBox.KeyDown += TextBox_KeyDown;
- Grid.SetColumn(textBox, j);
- Grid.SetRow(textBox, i);
- matrixGrid.Children.Add(textBox);
- }
- }
- return matrixGrid;
- }
- private void TextBox_KeyDown(object sender, KeyEventArgs e)
- {
- if (e.Key == Key.W ||
- e.Key == Key.A ||
- e.Key == Key.S ||
- e.Key == Key.D ||
- e.Key == Key.Tab)
- {
- e.Handled = true;
- FocusOnNext((TextBox)sender, e.Key);
- return;
- }
- if (e.Key != Key.NumPad0 && e.Key != Key.D0 &&
- e.Key != Key.NumPad1 && e.Key != Key.D1 &&
- e.Key != Key.NumPad2 && e.Key != Key.D2 &&
- e.Key != Key.NumPad3 && e.Key != Key.D3 &&
- e.Key != Key.NumPad4 && e.Key != Key.D4 &&
- e.Key != Key.NumPad5 && e.Key != Key.D5 &&
- e.Key != Key.NumPad6 && e.Key != Key.D6 &&
- e.Key != Key.NumPad7 && e.Key != Key.D7 &&
- e.Key != Key.NumPad8 && e.Key != Key.D8 &&
- e.Key != Key.NumPad9 && e.Key != Key.D9)
- {
- e.Handled = true;
- }
- }
- private void FocusOnNext(TextBox tb, Key KeyArg)
- {
- Grid matrixGrid = (Grid)tb.Parent;
- int columns = matrixGrid.ColumnDefinitions.Count;
- int rows = matrixGrid.RowDefinitions.Count;
- int element = tb.TabIndex;
- if (((int)KeyArg) == 40 || KeyArg == Key.S)
- {
- element += rows;
- }
- else if ((int)KeyArg == 38 || KeyArg == Key.W)
- {
- element -= rows;
- }
- else if ((int)KeyArg == 37 || KeyArg == Key.A)
- {
- element -= 1;
- }
- else if ((int)KeyArg == 39 || KeyArg == Key.D || KeyArg == Key.Tab)
- {
- element += 1;
- }
- else
- {
- return;
- }
- int counter = 0;
- for (int i = 0; i < columns; i++)
- {
- for (int j = 0; j < rows; j++)
- {
- counter++;
- if (element == counter)
- {
- matrixGrid.Children.Cast<TextBox>().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Focus();
- }
- }
- }
-
- }
- #region HumburgerMenuItems
- private void BtnAddition_Click(object sender, RoutedEventArgs e)
- {
- GridContentAddition.Visibility = Visibility.Visible;
- GridContentDifference.Visibility = Visibility.Collapsed;
- GridContentMultiplication.Visibility = Visibility.Collapsed;
- GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
- GridContentRowsReplace.Visibility = Visibility.Collapsed;
- GridContentTranspose.Visibility = Visibility.Collapsed;
- // GridContentRowReplaceOnTranspositionVector;
- // GridContentInverse;
- GridAdditionFrstTerm.Children.Add(CreateMatrix(5, 5));
- GridAdditionScndTerm.Children.Add(CreateMatrix(5, 5));
- GridAdditionResult.Children.Add(CreateMatrix(5, 5));
- }
- private void BtnDifference_Click(object sender, RoutedEventArgs e)
- {
- GridContentAddition.Visibility = Visibility.Collapsed;
- GridContentDifference.Visibility = Visibility.Visible;
- GridContentMultiplication.Visibility = Visibility.Collapsed;
- GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
- GridContentRowsReplace.Visibility = Visibility.Collapsed;
- GridContentTranspose.Visibility = Visibility.Collapsed;
- // GridContentRowReplaceOnTranspositionVector;
- // GridContentInverse;
- GridDifferenceFrstTerm.Children.Add(CreateMatrix(5, 5));
- GridDifferenceScndTerm.Children.Add(CreateMatrix(5, 5));
- GridDifferenceResult.Children.Add(CreateMatrix(5, 5));
- }
- private void BtnMultiplicationOnScalar_Click(object sender, RoutedEventArgs e)
- {
- GridContentAddition.Visibility = Visibility.Collapsed;
- GridContentDifference.Visibility = Visibility.Collapsed;
- GridContentMultiplication.Visibility = Visibility.Visible;
- GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
- GridContentRowsReplace.Visibility = Visibility.Collapsed;
- GridContentTranspose.Visibility = Visibility.Collapsed;
- // GridContentRowReplaceOnTranspositionVector;
- // GridContentInverse;
- GridMultiplicationOnScalarFrstTerm.Children.Add(CreateMatrix(5, 5));
- GridMultiplicationOnScalarResult.Children.Add(CreateMatrix(5, 5));
- }
- private void BtnTransposition_Click(object sender, RoutedEventArgs e)
- {
- GridContentAddition.Visibility = Visibility.Collapsed;
- GridContentDifference.Visibility = Visibility.Collapsed;
- GridContentMultiplication.Visibility = Visibility.Collapsed;
- GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
- GridContentRowsReplace.Visibility = Visibility.Collapsed;
- GridContentTranspose.Visibility = Visibility.Visible;
- // GridContentRowReplaceOnTranspositionVector;
- // GridContentInverse;
- GridTransposeFrom.Children.Add(CreateMatrix(3, 5));
- GridTransposed.Children.Add(CreateMatrix(5, 3));
- }
- private void BtnMultiplicationOnTransposed_Click(object sender, RoutedEventArgs e)
- {
- GridContentAddition.Visibility = Visibility.Collapsed;
- GridContentDifference.Visibility = Visibility.Collapsed;
- GridContentMultiplication.Visibility = Visibility.Collapsed;
- GridContentMultiplicationOnTransposed.Visibility = Visibility.Visible;
- GridContentRowsReplace.Visibility = Visibility.Collapsed;
- GridContentTranspose.Visibility = Visibility.Collapsed;
- // GridContentRowReplaceOnTranspositionVector;
- // GridContentInverse;
- }
- private void BtnRowsReplace_Click(object sender, RoutedEventArgs e)
- {
- GridContentAddition.Visibility = Visibility.Collapsed;
- GridContentDifference.Visibility = Visibility.Collapsed;
- GridContentMultiplication.Visibility = Visibility.Collapsed;
- GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
- GridContentRowsReplace.Visibility = Visibility.Visible;
- GridContentTranspose.Visibility = Visibility.Collapsed;
- // GridContentRowReplaceOnTranspositionVector;
- // GridContentInverse;
- }
- private void BtnInverse_Click(object sender, RoutedEventArgs e)
- {
- GridContentAddition.Visibility = Visibility.Collapsed;
- GridContentDifference.Visibility = Visibility.Collapsed;
- GridContentMultiplication.Visibility = Visibility.Collapsed;
- GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
- GridContentRowsReplace.Visibility = Visibility.Collapsed;
- GridContentTranspose.Visibility = Visibility.Collapsed;
- // GridContentRowReplaceOnTranspositionVector;
- // GridContentInverse;
- }
- private void BtnRowsReplaceOnTranspositionVector_Click(object sender, RoutedEventArgs e)
- {
- GridContentAddition.Visibility = Visibility.Collapsed;
- GridContentDifference.Visibility = Visibility.Collapsed;
- GridContentMultiplication.Visibility = Visibility.Collapsed;
- GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
- GridContentRowsReplace.Visibility = Visibility.Collapsed;
- GridContentTranspose.Visibility = Visibility.Collapsed;
- // GridContentRowReplaceOnTranspositionVector;
- // GridContentInverse;
- }
- #endregion
- }
- enum Operation
- {
- Addition,
- Difference,
- MultiplicationOnScalar,
- Transposition,
- MultiplicationOnTransposed,
- RowReplace,
- RowReplaceOnTranspositionVector,
- Inverse,
- NoChosen
- }
- }
|