﻿<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<phone:PhoneApplicationPage
    x:Class="WPCordovaClassLib.Cordova.Commands.ContactPicker"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeLarge}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible="False">

    <Grid x:Name="ContentRoot" Background="Transparent">
        
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>

        <TextBlock Name="HeaderBlock"
                   Text="CHOOSE A CONTACT" 
                   Margin="20,50,0,50" 
                   FontSize="{StaticResource PhoneFontSizeMedium}"
                   FontFamily="{StaticResource PhoneFontFamilySemiBold}"
                   Grid.Row="0"
                   />

        <TextBlock Name="NoContactsBlock"
                   Margin="20,0,0,0" 
                   Text="Sorry, we couldn't find any contacts."
                   TextWrapping="Wrap"
                   FontSize="{StaticResource PhoneFontSizeLarge}"
                   FontFamily="{StaticResource PhoneFontFamilyLight}"
                   Visibility="Collapsed"
                   Grid.Row="1"
                   />
        
        <phone:LongListSelector Name="lstContacts"
                                SelectionChanged="ContactsListSelectionChanged"
                                Grid.Row="1">
            <phone:LongListSelector.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" Margin="16,0,0,0">
                        <StackPanel Margin="0,20,0,10">
                            <TextBlock Text="{Binding DisplayName}"
                                       TextWrapping="Wrap"
                                       Style="{StaticResource PhoneTextExtraLargeStyle}" />
                        </StackPanel>
                    </StackPanel>
                </DataTemplate>
            </phone:LongListSelector.ItemTemplate>
        </phone:LongListSelector>
        
    </Grid>
</phone:PhoneApplicationPage>