Загрузка данных


<Window x:Class="CalculatorApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Калькулятор" Height="380" Width="300" ResizeMode="NoResize">
    <Grid Margin="10">
        <Grid.RowDefinitions>
            <RowDefinition Height="60"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <TextBox x:Name="Display" Grid.ColumnSpan="4" FontSize="24" TextAlignment="Right" IsReadOnly="True" VerticalContentAlignment="Center" Margin="0,0,0,10" Text=""/>

        <!-- Ряд 1 -->
        <Button Grid.Row="1" Grid.Column="0" Content="C" Click="Clear_Click" Margin="2"/>
        <Button Grid.Row="1" Grid.Column="1" Content="±" Click="Negate_Click" Margin="2"/>
        <Button Grid.Row="1" Grid.Column="2" Content="^" Click="Operator_Click" Margin="2"/>
        <Button Grid.Row="1" Grid.Column="3" Content="/" Click="Operator_Click" Margin="2"/>

        <!-- Ряд 2 -->
        <Button Grid.Row="2" Grid.Column="0" Content="7" Click="Number_Click" Margin="2"/>
        <Button Grid.Row="2" Grid.Column="1" Content="8" Click="Number_Click" Margin="2"/>
        <Button Grid.Row="2" Grid.Column="2" Content="9" Click="Number_Click" Margin="2"/>
        <Button Grid.Row="2" Grid.Column="3" Content="*" Click="Operator_Click" Margin="2"/>

        <!-- Ряд 3 -->
        <Button Grid.Row="3" Grid.Column="0" Content="4" Click="Number_Click" Margin="2"/>
        <Button Grid.Row="3" Grid.Column="1" Content="5" Click="Number_Click" Margin="2"/>
        <Button Grid.Row="3" Grid.Column="2" Content="6" Click="Number_Click" Margin="2"/>
        <Button Grid.Row="3" Grid.Column="3" Content="-" Click="Operator_Click" Margin="2"/>

        <!-- Ряд 4 -->
        <Button Grid.Row="4" Grid.Column="0" Content="1" Click="Number_Click" Margin="2"/>
        <Button Grid.Row="4" Grid.Column="1" Content="2" Click="Number_Click" Margin="2"/>
        <Button Grid.Row="4" Grid.Column="2" Content="3" Click="Number_Click" Margin="2"/>
        <Button Grid.Row="4" Grid.Column="3" Content="+" Click="Operator_Click" Margin="2"/>

        <!-- Ряд 5 -->
        <Button Grid.Row="5" Grid.Column="0" Grid.ColumnSpan="2" Content="0" Click="Number_Click" Margin="2"/>
        <Button Grid.Row="5" Grid.Column="2" Content="," Click="Decimal_Click" Margin="2"/>
        <Button Grid.Row="5" Grid.Column="3" Content="=" Click="Equals_Click" Margin="2"/>
    </Grid>
</Window>




using System;
using System.Windows;
using System.Windows.Controls;

namespace CalculatorApp
{
    public partial class MainWindow : Window
    {
        private double _firstNumber = 0;
        private string _operation = "";
        private string _currentInput = "";
        private bool _isResultShown = false;

        public MainWindow()
        {
            InitializeComponent();
            Display.Text = "";
        }

        private void Number_Click(object sender, RoutedEventArgs e)
        {
            Button button = (Button)sender;
            if (_isResultShown)
            {
                _currentInput = "";
                _isResultShown = false;
            }
            _currentInput += button.Content.ToString();
            UpdateDisplay();
        }

        private void Decimal_Click(object sender, RoutedEventArgs e)
        {
            if (_isResultShown)
            {
                _currentInput = "0";
                _isResultShown = false;
            }
            if (!_currentInput.Contains(","))
            {
                if (string.IsNullOrEmpty(_currentInput))
                    _currentInput = "0";
                _currentInput += ",";
            }
            UpdateDisplay();
        }

        private void Negate_Click(object sender, RoutedEventArgs e)
        {
            if (!string.IsNullOrEmpty(_currentInput) && double.TryParse(_currentInput, out double current))
            {
                current = -current;
                _currentInput = current.ToString();
                UpdateDisplay();
            }
        }

        private void Operator_Click(object sender, RoutedEventArgs e)
        {
            Button button = (Button)sender;
            if (!string.IsNullOrEmpty(_currentInput))
            {
                if (double.TryParse(_currentInput, out double result))
                {
                    if (string.IsNullOrEmpty(_operation))
                    {
                        _firstNumber = result;
                    }
                    else
                    {
                        _firstNumber = Calculate(_firstNumber, result, _operation);
                    }
                }
                _currentInput = "";
            }
            _operation = button.Content.ToString();
            _isResultShown = false;
            UpdateDisplay();
        }

        private void Equals_Click(object sender, RoutedEventArgs e)
        {
            if (!string.IsNullOrEmpty(_operation) && !string.IsNullOrEmpty(_currentInput))
            {
                if (double.TryParse(_currentInput, out double secondNumber))
                {
                    double result = Calculate(_firstNumber, secondNumber, _operation);
                    Display.Text = result.ToString();
                    _firstNumber = result;
                    _currentInput = result.ToString();
                    _operation = "";
                    _isResultShown = true;
                }
            }
        }

        private double Calculate(double a, double b, string op)
        {
            switch (op)
            {
                case "+": return a + b;
                case "-": return a - b;
                case "*": return a * b;
                case "/":
                    if (b == 0)
                    {
                        MessageBox.Show("Ошибка: деление на ноль.");
                        return a;
                    }
                    return a / b;
                case "^": return Math.Pow(a, b);
                default: return b;
            }
        }

        private void UpdateDisplay()
        {
            if (string.IsNullOrEmpty(_operation))
            {
                Display.Text = _currentInput;
            }
            else
            {
                Display.Text = $"{_firstNumber} {_operation} {_currentInput}";
            }
        }

        private void Clear_Click(object sender, RoutedEventArgs e)
        {
            _currentInput = "";
            _firstNumber = 0;
            _operation = "";
            _isResultShown = false;
            Display.Text = "";
        }
    }
}