Ahora veamos el código XAML para las dos entidades

Librería

<UserControl x:Class="Silverlight_CPOO_02_Herencia_Interfaces.Libreria"
    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="150" d:DesignWidth="400" >
    <Grid x:Name="LayoutRoot" Background="Azure" Height="150" Width="400" HorizontalAlignment="Left" VerticalAlignment="Top" >
        <Grid.RowDefinitions>
            <RowDefinition Height="30*" />
            <RowDefinition Height="100*" />
        </Grid.RowDefinitions>
        <TextBlock Text="LIBRERIA TOMOS" HorizontalAlignment="Center" Grid.Row="0"
                   FontSize="25" FontFamily="Times New Roman" />

        <StackPanel x:Name="PanelDatos" Grid.Row="2">
            <TextBlock FontSize="20" Text="{Binding Path=Titulo}"/>
            <TextBlock FontSize="20"  Text="{Binding Path=Contenido}"/>
            <TextBlock FontSize="20"  Text="{Binding Path=De}"/>
            <TextBlock FontSize="20"  Text="{Binding Path=Para}"/>
        </StackPanel>
    </Grid>

</UserControl>

Pizzería


<UserControl x:Class="Silverlight_CPOO_02_Herencia_Interfaces.Pizzeria"
    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="150" d:DesignWidth="400" HorizontalAlignment="Left" VerticalAlignment="Top">

        <Grid x:Name="LayoutRoot" Background="Red" Height="150" Width="400">
        <Grid.RowDefinitions>
            <RowDefinition Height="30*" />
            <RowDefinition Height="100*" />
        </Grid.RowDefinitions>
        <TextBlock Text="PIZZAS PEPETRONI" HorizontalAlignment="Center" Grid.Row="0"
                   FontSize="25" FontFamily="Comic Sans MS" Foreground="White"/>

        <StackPanel x:Name="PanelDatos" Grid.Row="1">
            <TextBlock Foreground="White" FontSize="20" Text="{Binding Path=Titulo}"/>
            <TextBlock Foreground="White" FontSize="20"  Text="{Binding Path=Contenido}"/>
            <TextBlock Foreground="White" FontSize="20"  Text="{Binding Path=De}"/>
            <TextBlock Foreground="White" FontSize="20"  Text="{Binding Path=Para}"/>
        </StackPanel>
    </Grid>
</UserControl>

Como se ve, en ambas entidades se define un enlace de Binding con las propiedades de cada UserControl respectivo. Y si se observa el código de C# el enlace se hace mediante:

PanelDatos.DataContext = this;

Ya que esto permite definir el contexto al cual se esta enlazando en este caso el control StackPanel del código XAML.

Ahora veamos el código implementado en el MainPage

C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace Silverlight_CPOO_02_Herencia_Interfaces
{
    public partial class MainPage : UserControl
    {
        /// <summary>
        /// Instancias privadas de objeto tipo Creador Mensaje
        /// </summary>
        ICreadorMensaje iLibreria;
        ICreadorMensaje iPizzeria;

        public MainPage()
        {
            InitializeComponent();
            Loaded += new RoutedEventHandler(MainPage_Loaded);
        }

        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            ///Se inicializa el objeto tipo papelería,
            ///pero tomado como el tipo abstracto
            ///definido en la interface.
            iLibreria = new Libreria();
            iLibreria.Titulo = "Libro del Día";
            iLibreria.Contenido = "Cien años de soledad";
            iLibreria.De = "Ofrece su Librería TOMOS";
            iLibreria.Para = "Para los Lectores";

            iPizzeria = new Pizzeria();
            iPizzeria.Titulo = "La Pizza del día";
            iPizzeria.Contenido = "La más jugosa pizza de champiñones";
            iPizzeria.De = "Ofrece su pizzería Pepetroni";
            iPizzeria.Para = "Para sus clientes favoritos";
        }

        private void BtLib_Click(object sender, RoutedEventArgs e)
        {
            //Se solicita la creación del mensaje.
            iLibreria.CrearMensaje(LayoutMensajes);
        }

        private void BtPizz_Click(object sender, RoutedEventArgs e)
        {
            iPizzeria.CrearMensaje(LayoutMensajes);
        }
    }
}

XAML, para la IU

<UserControl x:Class="Silverlight_CPOO_02_Herencia_Interfaces.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="400">

    <Grid x:Name="LayoutRoot" Background="White">
        <Grid.RowDefinitions>
            <RowDefinition Height="44*" />
            <RowDefinition Height="256*" />
        </Grid.RowDefinitions>
        <Button Content="Mensaje Librería" Height="23" HorizontalAlignment="Left"
                Margin="12,12,0,0" Name="BtLib" VerticalAlignment="Top" Width="112" Click="BtLib_Click" />
        <Button Content="Mensaje Pizzería" Height="23" HorizontalAlignment="Left"
                Margin="285,12,0,0" Name="BtPizz" VerticalAlignment="Top" Width="103" Click="BtPizz_Click" />

        <Grid Name="LayoutMensajes" Grid.Row="1">

        </Grid>
    </Grid>
</UserControl>

Veamos el demo del ejemplo:

Anuncios

Páginas: 1 2 3