2010-11-13 10 views
5

Estoy seguro de que esta pregunta o sus derivados se han pedido miles de veces, pero no he podido encontrar nada que me haya ayudado a resolver el problema, por lo que estoy preguntando. No dudes en dirigirme al duplicado que estoy seguro existe pero no puedo encontrar. Aparentemente no soy tan bueno con las palabras clave.Plantilla de control personalizado de WPF no aplicada

Tengo un control personalizado, tiene su propio diccionario de recursos utilizado solo para definir la plantilla de control. Este diccionario se fusiona en Generic.xaml.

El problema es que cuando este control aparece en la interfaz de usuario, no tiene nada dentro. Usé Snoop para descubrir esto. El control está en la interfaz de usuario, pero está completamente vacío.

A continuación encontrará los elementos que creo que son responsables del problema. Cualquier ayuda o consejo que pueda ofrecer es muy apreciada.

Las partes pertinentes de mi estructura de carpetas son así:

My Directory Structure

BasicTemplate.xaml:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:WPFSpecBuilder.Layouts.Templates"> 

    <Style TargetType="{x:Type local:BasicTemplate}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type local:BasicTemplate}"> 
        <Border Background="{TemplateBinding Background}" 
          BorderBrush="{TemplateBinding BorderBrush}" 
          BorderThickness="{TemplateBinding BorderThickness}"> 
         <Grid> 
          <TextBlock Text="This is a basic template." /> 
         </Grid> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ResourceDictionary> 

Generic.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="Layouts/Templates/XAML/BasicTemplate.xaml" /> 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 
+0

que avanzaría por el principio de exclusión: En primer lugar afirma que su definición de estilo no es parte de la problema. Por lo tanto, selecciónalo de ResourceDictionary anidado y pégalo en Generic.xaml (que espero que hagas referencia en App.xaml). Después de que muestre el efecto deseado, pruebe lo que Steve propone (afirmando que su ruta relativa está configurada correctamente) –

Respuesta

1

Prueba esto:

  1. Conjunto Acción de generación de BasicTemplate.xaml a la página.

  2. Añadir referencia a BasicTemplate.xaml en Generic.xaml:

    ResourceDictionary Fuente = "/ WPDSpecBuilder; componente/Presentaciones/Plantillas/Xaml/BasicTemplate.xaml"

Debería obras.

1

Creo que esto puede ser tan simple como cambiar la ruta relativa del diccionario fusionado. Trate de añadir un / al comienzo de la ruta de la carpeta:

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="/Layouts/Templates/XAML/BasicTemplate.xaml" /> 
</ResourceDictionary.MergedDictionaries> 
1

Probar:

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="pack://application:,,,/WPDSpecBuilder;component/Layouts/Templates/XAML/BasicTemplate.xaml" /> 
</ResourceDictionary.MergedDictionaries> 

See here for more details on Pack Uri's

Cuestiones relacionadas