DRAG DROP
###BeginCaseStudy###
Case Study: 2
Scenario 2
Background
You are developing a Windows Store app named Picture Sharer. The app will allow users to
capture, modify, caption, and share pictures.
Application Structure
The SharelmageButton and GetContactsButton controls use the same foreground color. The
foreground color might change in the future.
The following code defines a custom button style named ButtonStyleRed:
<Style TargecType="Buccon" x:Key="ButconScyleRed">
<Setcer Property="Foreground" Value="#FFC34343,'/>
<Setter Property—'Border3rushn Value—,#FFC34343"/>
…
</Style>
Relevant portions of the app files are shown. (Line numbers are included for reference only
and include a two-character prefix that denotes the specific file to which they belong.)
Business Requirements
The app must meet the following business requirements:
• Allow users to capture and retrieve pictures, modify pictures by adding a shading
effect, and add captions to images.
• Support only Landscape and Landscape-flipped orientations.
• Ensure that users can select and modify imaqes from the PictureChooserPaqe page.
• Ensure that users can change the magnification of the selected image and resize the
image by using pinch and stretch gestures. Scaling should be fluid and precisely
controlled by the user.
The app must be localized for the French Canadian market.
Technical Requirements
The app must meet the following technical requirements:
• Scroll bars must not be visible.
• The CaptionTextBlock and CaptionTextBox controls must appear side by side,
without overlapping and on the same line. The CaptionTextBox control should
appear to the right of the CaptionTextBlock control.
• The ContactPicker object must be filtered to display only email addresses.
• Minimize the code that is required to implement optical zoom functionality.
You must perform the following tasks:
• Handle the Click event of the GetPictureButton control to switch from the current
page to the PictureChooserPage page.
• After the user selects an image on the PictureChooserPage page, ensure that the app
navigates back to the PictureSharerMainPage page.
• Track the current screen orientation and page size by updating the
_currentViewState, _currentHeight, and _currentWidth fields every time the screen
orientation or page size changes.
• Create a style named ButtonStyleWhite that inherits all the style settings of the
ButtonStyleRed style except the border color; the border color must be white. The
ButtonStyleWhite style must automatically update with any changes that are made
to the ButtonStyleRed style.
• Create a resource named ButtonForegroundColor to implement the button
foreground color so that it can be referenced in XAML by using the following
standard syntax: Foreground-“{StaticResourceButtonForegroundColor}”
• Ensure that the OnNavigatedTo() method updates the current picture when a new
picture is selected.
• Change the background for the root Grid element to a vertical gradient that
transitions from black at the top to maroon at the bottom. Create a resource named
GridBackgroundGradientBrush to hold the requested gradient.
• While testing the app, you observe the following results:
• An exception is being thrown in the GetContactsCompleted event handler when the
retrieved email address is assigned to the RecipientsTextBlock control. The exception
message states: “The application called an interface that was marshalled for a
different thread.”
• When users navigate away from the PictureSharerMainPage page, information that
was entered in the CaptionTextBox control is lost.
PictureSharerMainPage.xaml
###EndCaseStudy###
You need to refactor the code so that more than one contact can be selected by using the
ContactPicker class.
You have the following code:
Which code snippets should you insert in Target 1, Target 2, and Target 3 to complete the
code? (To answer, drag the appropriate code snippets to the correct targets in the answer
area. Each code snippet may be used once, more than once, or not at all. You may need to
drag the split bar between panes or scroll to view content.)
Explanation:
Note:
PickMultipleContactsAsync
Launches the Contact Picker for selecting multiple contacts.
Return value
Type: IAsyncOperation<IVectorView>
Incorrect:
* ContactPicker.PickContactAsync, pickContactAsync method
Launches the Contact Picker to select a single contact.