2010-11-13 5 views
5

Je suis sûr que cette question ou des dérivés de celui-ci ont été posées un bazillion fois, mais je ne pouvais pas trouver quelque chose qui m'a aidé à résoudre le problème, alors je demande. N'hésitez pas à me diriger vers la copie qui, j'en suis sûr, existe mais que je ne trouve pas. Apparemment, je ne suis pas très bon avec des mots-clés.WPF Modèle de contrôle personnalisé Non appliqué

J'ai un contrôle personnalisé, il a son propre dictionnaire de ressources utilisé uniquement pour définir le modèle de contrôle. Ce dictionnaire est ensuite fusionné en Generic.xaml.

Le problème est que lorsque ce contrôle apparaît dans l'interface utilisateur, il n'a rien à l'intérieur. J'ai utilisé Snoop pour le savoir. Le contrôle est dans l'interface utilisateur, mais il est complètement vide.

Ci-dessous vous trouverez les articles qui, selon moi, sont responsables du problème. Toute aide ou conseil que vous pouvez offrir est grandement apprécié.

Les parties pertinentes de ma structure de dossiers sont comme ceci:

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

J'avancerait par principe d'exclusion: Tout d'abord affirmer que votre définition de style ne fait pas partie du problème. Alors, choisissez-le dans votre ResourceDictionary imbriqué et collez-le dans le Generic.xaml (que j'espère que vous référencez dans App.xaml). Après cela montre l'effet désiré, essayez ce que Steve propose (affirmant que votre chemin relatif est réglé correctement) –

Répondre

1

Essayez ceci:

  1. Set Build Action à BasicTemplate.xaml à la page.

  2. Ajouter référence à BasicTemplate.xaml dans generic.xaml:

    ResourceDictionary Source = "/ WPDSpecBuilder; composants/layouts/Modèles/XAML/BasicTemplate.xaml"

Il devrait fonctionner.

1

Je pense que cela peut être aussi simple que de changer le chemin relatif du dictionnaire fusionné. Essayez d'ajouter un / au début du chemin du dossier:

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

Essayez:

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

See here for more details on Pack Uri's

Questions connexes