Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C# 2008 Step by Step.pdf
Скачиваний:
22
Добавлен:
25.03.2016
Размер:
13.96 Mб
Скачать

Chapter 22 Introducing Windows Presentation Foundation

439

Changing Properties Dynamically

You have been using the Design View window, the Properties window, and the XAML pane to set properties statically. When the form runs, it would be useful to reset the value of each

control to an initial default value. To do this, you will need to write some code (at last). In the following exercises, you will create a private method called Reset. Later, you will invoke the Reset method when the form first starts as well as when the user clicks the Clear button.

Create the Reset method

1.In the Design View window, right-click the form, and then click View Code. The Code and Text Editor window opens and displays the Window1.xaml.cs file so that you can add C# code to the form.

2.Add the following Reset method, shown in bold type, to the Window1 class:

public partial class Window1 : Window

{

...

public void Reset()

{

firstName.Text = String.Empty; lastName.Text = String.Empty;

}

}

The two statements in this method ensure that the firstName and lastName text boxes are blank by assigning an empty string to their Text property.

You also need to initialize the properties for the remaining controls on the form and populate the towerNames combo box and the methods list box.

If you recall, the towerName combo box will contain a list of all the bell towers in the

Middleshire district. This information would usually be held in a database, and you would write code to retrieve the list of towers and populate the ComboBox. For this example, the application will use a hard-coded collection. A ComboBox has a property called Items that contains a list of the data to be displayed.

3.Add the following string array called towers, shown in bold type, which contains a hard-coded list of tower names, to the Window1 class:

public partial class Window1 : Window

{

private string[] towers = { “Great Shevington”, “Little Mudford”, “Upper Gumtree”, “Downley Hatch” };

...

}

440

Part IV Working with Windows Applications

4.In the Reset method, after the code you have already written, add the following statements shown in bold type to clear the towerNames combo box (this is important

because otherwise you could end up with many duplicate values in the list) and add the towers found in the towers array. The statement after the foreach loop causes the first tower to be displayed as the default value:

public void Reset()

{

...

towerNames.Items.Clear();

foreach (string towerName in towers)

{

towerNames.Items.Add(towerName);

}

towerNames.Text = towerNames.Items[0] as string;

}

Note You can also specify hard-coded values at design time in the XAML description of a combo box, like this:

<ComboBox Text=”towerNames”> <ComboBox.Items>

<ComboBoxItem> Great Shevington

</ComboBoxItem>

<ComboBoxItem> Little Mudford

</ComboBoxItem>

<ComboBoxItem> Upper Gumtree

</ComboBoxItem>

<ComboBoxItem> Downley Hatch

</ComboBoxItem>

</ComboBox.Items>

</ComboBox>

5.You must populate the methods list box with a list of bell-ringing methods. Like a combo box, a list box has a property called Items that contains a collection of values to be displayed. Also, like the ComboBox, it could be populated from a database. However, as before, you will simply supply some hard-coded values for this example. Add the

Chapter 22 Introducing Windows Presentation Foundation

441

following string array shown in bold type, which contains the list of methods, to the

Window1 class:

public partial class Window1 : Window

{

...

private string[] ringingMethods = { “Plain Bob”, “Reverse Canterbury”, “Grandsire”, “Stedman”, “Kent Treble Bob”, “Old Oxford Delight”, “Winchendon Place”, “Norwich Surprise”, “Crayford Little Court” };

...

}

6.The methods list box should display a list of check boxes rather than ordinary text strings. With the flexibility of the WPF model, you can specify a variety of different

types of content for controls such as list boxes and combo boxes. Add the following code shown in bold type to the Reset method to fill the methods list box with the methods in the ringingMethods array. Notice that this time each item is a check box. You can specify the text displayed by the check box by setting its Content property, and you can specify the spacing between items in the list by setting the Margin property; this code inserts a spacing of 10 units after each item:

public void Reset()

{

...

methods.Items.Clear(); CheckBox method;

foreach (string methodName in ringingMethods)

{

method = new CheckBox();

method.Margin = new Thickness(0, 0, 0, 10); method.Content = methodName; methods.Items.Add(method);

}

}

Note Most WPF controls have a Content property that you can use to set and read the value displayed by that control. This property is actually an object, so you can set it to

almost any type, as long as it makes sense to display it!

7.The isCaptain check box should default to false. To do this, you need to set the IsChecked property. Add the following statement shown in bold type to the Reset method:

public void Reset()

{

...

isCaptain.IsChecked = false;

}

442

Part IV Working with Windows Applications

8.The form contains four radio buttons that indicate the number of years of bell-ringing experience the member has. A radio button is similar to a CheckBox in that it can contain a true or false value. However, the power of radio buttons increases when you put them together in a GroupBox. In this case, the radio buttons form a mutually exclusive collection—at most, only one radio button in a group can be selected (set to true), and all the others will automatically be cleared (set to false). By default, none of the buttons will be selected. You should rectify this by setting the IsChecked property of the novice radio button. Add the following statement shown in bold type to the Reset method:

public void Reset()

{

...

novice.IsChecked = true;

}

9.You should ensure that the Member Since DateTimePicker control defaults to the current date. You can do this by setting the Value property of the control. You can obtain the current date from the static Today method of the DateTime class.

Add the following code shown in bold type to the Reset method to initialize the

DateTimePicker control.

public void Reset()

{

...

System.Windows.Forms.DateTimePicker memberDate = hostMemberSince.Child as System.Windows.Forms.DateTimePicker;

memberDate.Value = DateTime.Today;

}

Notice that to access an object in a WindowsFormsHost container, you reference the Child property of the container and then cast it to the appropriate type.

Additionally, notice that the DateTimePicker class is defined in the System.Windows. Forms namespace. Typically, you add a using statement for the file defining a class to

bring the namespace of the class into scope, but you should not do this when integrating Windows Forms controls into a WPF application. The reason is that the System. Windows.Forms namespace contains many controls that use the same names as those

in the WPF library, so adding a using statement would make all references to these controls ambiguous!

10.Finally, you need to arrange for the Reset method to be called when the form is first displayed. A good place to do this is in the Window1 constructor. Insert a call to the Reset method after the statement that calls the InitializeComponent method, as shown in bold type here:

public Window1()

{

InitializeComponent();

this.Reset();

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]