﻿<!--
 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. 
-->
<UserControl x:Class="WPCordovaClassLib.Cordova.UI.NotificationBox"
    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"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    d:DesignHeight="800" d:DesignWidth="480" VerticalAlignment="Stretch">

   <!--TitlePanel contains the name of the application and page title-->
    <Grid x:Name="LayoutRoot"
          Background="{StaticResource PhoneSemitransparentBrush}">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>

        <Grid x:Name="TitlePanel" 
            Grid.Row="0"
            VerticalAlignment="Top"
            Background="{StaticResource PhoneSemitransparentBrush}">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="*"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
            </Grid.RowDefinitions>

            <TextBlock x:Name="PageTitle" 
                       Text="Title" 
                       Margin="10,10" 
                       Grid.Row="0"
                       Style="{StaticResource PhoneTextTitle2Style}"/>
            
            <ScrollViewer x:Name="ContentScroller"
                          Grid.Row="1"
                          MinHeight="120"
                          Margin="10,10">
                <StackPanel Orientation="Vertical">
                    <TextBlock x:Name="SubTitle" 
                               Text="Subtitle" 
                               Width="Auto"
                               TextWrapping="Wrap"
                               Style="{StaticResource PhoneTextTitle3Style}"/>
                    <TextBox x:Name="InputText" 
                             Visibility="Collapsed"/>
                </StackPanel>
            </ScrollViewer>

            <ScrollViewer HorizontalScrollBarVisibility="Auto" 
                          Grid.Row="2"
                          VerticalScrollBarVisibility="Disabled">       
                <StackPanel x:Name="ButtonPanel"
                            Margin="10,10"
                            Orientation="Horizontal"/>
            </ScrollViewer>

    </Grid>
    </Grid>

</UserControl>
