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
{
///
/// Interaction logic for MainWindow.xaml
///
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().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
}
}