none
DataTemplate (ContentControl) en WPF RRS feed

  • Pregunta

  • Buen día, tengo un problema específico en una migración que estoy haciendo de Silverlight a WPF

    En mi proyecto en Silverlight en una página, hago una definición de DataTemplates que luego dependiendo de un parámetro utilizo uno u otro de estos

    En XAML de mi page tengo:

    <navigation:Page.Resources>
        <DataTemplate x:Name="TipoMttoMP" DataType="ContentControl">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding SelectedItem.Frecuencia, ElementName=cbmtto_TipoMantenimiento}" 
                                VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5"/>
                <TextBlock Text="{Binding SelectedItem.UnidadFrecuencia, ElementName=cbmtto_TipoMantenimiento}" 
                                VerticalAlignment="Center" HorizontalAlignment="Left" />
                <TextBlock Text=" TIEMPO STD: " VerticalAlignment="Center" HorizontalAlignment="Left" FontWeight="SemiBold"/>
                <TextBlock Text="{Binding SelectedItem.TiempoEstandarHrs, ElementName=cbmtto_TipoMantenimiento}" 
                                VerticalAlignment="Center" HorizontalAlignment="Left" />
                <TextBlock Text=" HRS" VerticalAlignment="Center" HorizontalAlignment="Left" FontWeight="SemiBold" />
            </StackPanel>
        </DataTemplate>
        <DataTemplate x:Name="TipoMttoMC" DataType="ContentControl">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding SelectedItem.DESCRIPCION, ElementName=cbmtto_TipoMantenimiento}" 
                                VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5"/>
            </StackPanel>
        </DataTemplate>
        <DataTemplate x:Name="TipoMttoOLL" DataType="ContentControl">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding SelectedItem.DESCRIPCION, ElementName=cbmtto_TipoMantenimiento}" 
                                VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5"/>
            </StackPanel>
        </DataTemplate>
    </navigation:Page.Resources>

    Y luego en el behind de mi page, tengo:

    private void InicializaComboTipoMantenimiento()
    {
        if (ADMONOMvm != null)
        {
            switch (ADMONOMvm.TIPOMTTO)
            {
                case "MP":
                    cbmtto_TipoMantenimiento.DisplayMemberPath = "ClaveMtto";
                    cbmtto_TipoMantenimiento.SelectedValuePath = "ClaveMtto";
                    cbmtto_TipoMantenimiento.SelectedValue = "{Binding SelectedItem.ClaveMtto, ElementName=mtto_OrdenMttoDomainDataSource, Converter={StaticResource Trim} }";
                    cbmtto_TipoMantenimiento.ItemsSource = mtto_TipoMantenimientoDomainDataSource.Data; // "{Binding Data, ElementName=mtto_TipoMantenimientoDomainDataSource, Mode=OneWay}";
                    TipoMttoContent.ContentTemplate = TipoMttoMP;
                    break;
                case "MC":
                    lstTipoMtto = new List<TipoMttoLista>();
                    lstTipoMtto.Add(new TipoMttoLista { CLAVEMTTO = "MCI       ", DESCRIPCION = "MANTENIMIENTO CORRECTIVO INTERNO" });
                    lstTipoMtto.Add(new TipoMttoLista { CLAVEMTTO = "MCE       ", DESCRIPCION = "MANTENIMIENTO CORRECTIVO EXTERNO" });
                    cbmtto_TipoMantenimiento.ItemsSource = lstTipoMtto;
                    cbmtto_TipoMantenimiento.DisplayMemberPath = "CLAVEMTTO";
                    cbmtto_TipoMantenimiento.SelectedValuePath = "CLAVEMTTO";
                    cbmtto_TipoMantenimiento.SelectedValue = "{Binding SelectedItem.ClaveMtto, ElementName=mtto_OrdenMttoDomainDataSource, Converter={StaticResource Trim} }";
                    TipoMttoContent.ContentTemplate = TipoMttoMC;
                    break;
                case "OLL":
                    lstTipoMtto = new List<TipoMttoLista>();
                    lstTipoMtto.Add(new TipoMttoLista { CLAVEMTTO = "OLL       ", DESCRIPCION = "ORDEN DE LLANTAS" });
                    cbmtto_TipoMantenimiento.ItemsSource = lstTipoMtto;
                    cbmtto_TipoMantenimiento.DisplayMemberPath = "CLAVEMTTO";
                    cbmtto_TipoMantenimiento.SelectedValuePath = "CLAVEMTTO";
                    cbmtto_TipoMantenimiento.SelectedValue = "{Binding SelectedItem.ClaveMtto, ElementName=mtto_OrdenMttoDomainDataSource, Converter={StaticResource Trim} }";
                    cbElectrico.Visibility = Visibility.Collapsed;
                    txbElectrico.Visibility = Visibility.Collapsed;
                    btnFirmaElectrico.Visibility = Visibility.Collapsed;
                    TipoMttoContent.ContentTemplate = TipoMttoOLL;
                    break;
                default:
                    break;
            }
        }
    }
    <!-- ContentControl con la descripcion del Tipo de Mtto segun sea el caso -->
    <ContentControl Name="TipoMttoContent" VerticalAlignment="Center" HorizontalAlignment="Left" />


      Y cuando lo paso a WPF, la parte en donde asigno cuál template voy a utilizar nunca lo reconoce, no identifica qué es TipoMttoMP

    TipoMttoContent.ContentTemplate = TipoMttoMP

    esta page de mi app en Silverlight, la migré a un User Control en WPF, pero no logro asignar el template que quiero usar...

    ¿Alguien me podría orientar?


    cyndyrdz




    lunes, 7 de marzo de 2022 19:42

Respuestas

  • Deleted
    lunes, 7 de marzo de 2022 21:59
  • Exacto, sabía que debía ser algo así de concepto diferente entre las plataformas, muchas gracias

    Al definir mi Template en XAML puse:

    <DataTemplate x:Name="TipoMttoMP" x:Key="TipoMttoMP" DataType="ContentControl">

    y en mi .cs ya funciona correctamente:

    TipoMttoContent.ContentTemplate = (DataTemplate)this.FindResource("TipoMttoMP"); 

    Muchas gracias sesenta aún no termino, pero ya avancé con esta parte


    cyndyrdz

    lunes, 7 de marzo de 2022 22:13

Todas las respuestas

  • Deleted
    lunes, 7 de marzo de 2022 20:02
  • si, así es, solo que no se hace igual que en Silverlight y ya intenté de muchas formas y no consigo que lo ubique, por ejemplo:

    TipoMttoContent.ContentTemplate = (DataTemplate)this.FindResource("TipoMttoMP"); 

    si lo pongo así, truena, me dice:

    Excepción no controlada del tipo 'System.Windows.ResourceReferenceKeyNotFoundException' en PresentationFramework.dll

    Información adicional: Recurso 'TipoMttoMP' no encontrado.


    cyndyrdz

    lunes, 7 de marzo de 2022 21:29
  • si cuando me truena inspecciono los Recursos definidos, veo todos los que puse en UserControl:

       Y el único que no identifico con los nombres que yo puse es el que muestro en azul (ContentControl), que debe ser el TipoMttoMP, pero no lo pone con el nombre, no sé como acceder a el, cómo asignarlo a mi ContentTemplate...


    cyndyrdz

    lunes, 7 de marzo de 2022 21:40
  • Deleted
    lunes, 7 de marzo de 2022 21:59
  • Exacto, sabía que debía ser algo así de concepto diferente entre las plataformas, muchas gracias

    Al definir mi Template en XAML puse:

    <DataTemplate x:Name="TipoMttoMP" x:Key="TipoMttoMP" DataType="ContentControl">

    y en mi .cs ya funciona correctamente:

    TipoMttoContent.ContentTemplate = (DataTemplate)this.FindResource("TipoMttoMP"); 

    Muchas gracias sesenta aún no termino, pero ya avancé con esta parte


    cyndyrdz

    lunes, 7 de marzo de 2022 22:13