Наш первый проект не просто так назван SilverlightCalculator, поэтому создадим калькулятор, который будет более наглядным примером, чем HelloWorld. Тем более, что HelloWorld - это не приложение, это всего лишь HelloWorld.
Логика нашего калькулятора будет очень проста. У нас будут три глобальных переменные: две для левого и правого операндов, и одна для знака операции. При нажатии на число, оно будет добавляться как строка справа к текущему операнду. При нажатии на кнопку со знаком операции у нас будут производиться вычисления. Также нам понадобится кнопка CLEAR для очиcтки все переменных и текстового поля. В итоге калькулятор будет выглядеть следующим образом:
Итак, в разметке XAML у нас следующий код:
<UserControl x:Class="SilverlightCalculator.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"> <Grid x:Name="LayoutRoot" Background="White"> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <TextBlock x:Name="textBlock" Grid.Column="0" Grid.ColumnSpan="4" /> <Button Grid.Column="0" Grid.Row="1">1</Button> <Button Grid.Column="1" Grid.Row="1">2</Button> <Button Grid.Column="2" Grid.Row="1">3</Button> <Button Grid.Column="3" Grid.Row="1">4</Button> <Button Grid.Column="0" Grid.Row="2">5</Button> <Button Grid.Column="1" Grid.Row="2">6</Button> <Button Grid.Column="2" Grid.Row="2">7</Button> <Button Grid.Column="3" Grid.Row="2">8</Button> <Button Grid.Column="0" Grid.Row="3">9</Button> <Button Grid.Column="1" Grid.Row="3">0</Button> <Button Grid.Column="2" Grid.Row="3">+</Button> <Button Grid.Column="3" Grid.Row="3">-</Button> <Button Grid.Column="0" Grid.Row="4">*</Button> <Button Grid.Column="1" Grid.Row="4">/</Button> <Button Grid.Column="2" Grid.Row="4">=</Button> <Button Grid.Column="3" Grid.Row="4">CLEAR</Button> </Grid> </UserControl>
А файл кода должен выглядеть следующим образом:
using System; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Shapes; namespace SilverlightCalculator { public partial class MainPage : UserControl { string leftop = ""; // Левый операнд string operation = ""; // Знак операции string rightop = ""; // Правый операнд public MainPage() { InitializeComponent(); // Добавляем обработчик для всех кнопок на гриде foreach (UIElement c in LayoutRoot.Children) { if (c is Button) { ((Button)c).Click += Button_Click; } } } private void Button_Click(object sender, RoutedEventArgs e) { // Получаем текст кнопки string s = (string)((Button)e.OriginalSource).Content; // ДОбавляем его в текстовое поле textBlock.Text += s; int num; // Пытаемся преобразовать его в число bool result =Int32.TryParse(s, out num); // Если текст - это число if (result == true) { // Если операция не задана if (operation == "") { // Добавляем к левому операнду leftop += s; } else { // Иначе к правому операнду rightop += s; } } // Если было введено не число else { // Если равно, то выводим результат операции if (s == "=") { Update_RightOp(); textBlock.Text += rightop; operation = ""; } // Очищаем поле и переменные else if (s == "CLEAR") { leftop = ""; rightop = ""; operation = ""; textBlock.Text = ""; } // Получаем операцию else { // Если правый операнд уже имеется, то присваиваем его значение левому // операнду, а правый операнд очищаем if (rightop != "") { Update_RightOp(); leftop = rightop; rightop = ""; } operation = s; } } } // Обновляем значение правого операнда private void Update_RightOp() { int num1 = Int32.Parse(leftop); int num2 = Int32.Parse(rightop); // И выполняем операцию switch (operation) { case "+": rightop = (num1 + num2).ToString(); break; case "-": rightop = (num1 - num2).ToString(); break; case "*": rightop = (num1 * num2).ToString(); break; case "/": rightop = (num1 / num2).ToString(); break; } } } }
Запускаем приложение на выполнение и получаем примитивный калькулятор.