Question

J'ai ajouté des styles personnalisés nommés à la app.xaml.

J'ai créé un dictionnaire de ressource externe (que j'attache dans les dictionnaires fusionnés du app.xaml) et lorsque je tente d'utiliser l'un des styles nommés ci-dessus dans le dictionnaire rcource, il dit qu'il n'y a pas de style.

aussi les styles par défaut (à savoir les styles sans nom qui appliquent pour l'ensemble de l'application) ne sont pas applicables sur les éléments du modèle.

Note: L'action de construction des modèles est 'Page'

.

Voici un exemple de la façon dont mon code est écrit:

<Application x:Class="Application"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
    ShutdownMode="OnExplicitShutdown">
    <Application.Resources>
        <ResourceDictionary>

            <Style
                    x:Key="StackPanelStyle" 
                    TargetType="StackPanel" 
                    BasedOn="{StaticResource {x:Type StackPanel}}">
                <Setter Property="Margin" Value="5"/>
                <Setter Property="Orientation" Value="Horizontal" />
                <Setter Property="Height" Value="40"/>
            </Style>

            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/Templates/DataTemplate1.xaml"/>
                <ResourceDictionary Source="/Templates/DataTemplate2.xaml"/>
                <ResourceDictionary Source="/Templates/DataTemplate3.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

un exemple du modèle de données:

<DataTemplate DataType="{x:Type Entity}" x:Key="NameDataTemplate">
    <Expander>
        <StackPanel>
            <--The following line produces: StackPanelStyle was not found.-->
            <StackPanel Style="{StaticResource StackPanelStyle}">
                <Label Content="Name:"/>
                <TextBox Text="{Binding Name}"/>
            </StackPanel>
        </StackPanel>
    </Expander>
</DataTemplate>

Toutes les idées? Dois-je fusionner les dictionnaires d'une manière différente?

Était-ce utile?

La solution

Le code ne fonctionne pas bien parce que le DataTemplate dans le dictionnaire de ressources ne sait pas que l'on l'utilise, juste été utilisé. Tout comme le mode Hollywood. Ils ont compilé séparément.

Pour faire ce travail, vous pouvez mettre votre style qui app.xaml dans le même dictionnaire de ressources du DataTemplate ou si vous ne l'aimez pas ce couplage, vous pouvez le mettre dans une autre ressource dictionnaire, et fusionner dans le dictionnaire de ressources du DataTemplate .

Autres conseils

L'action de construction pour votre App.xaml devrait être ApplicationDefinition, et l'action de construction pour vos fichiers de ressources Dictionnaire devrait être la page. Je devine que vous avez à la fois de ceux correct parce qu'ils sont par défaut (et je vois que vous avez mentionné au sujet de la page déjà).

Je ne peux pas penser à tout autre problème avec votre situation. Tant que vos ressources statiques sont définies dans le bon ordre, qu'ils semblent être, il devrait être en mesure de les trouver lorsque vous exécutez votre application.

Modifier

idée Debugging: Créer un dictionnaire de ressources nouvelle appelée « TestDictionary.xaml » avec un style simple bouton. Assurez-vous que ce dictionnaire est dans le même dossier que vos autres dictionnaires (DataTemplate1.xaml, etc.). Mettez un lien vers seulement TestDictionary en MergedDictionaries (commenter les autres). Mettez un bouton sur la fenêtre de démarrage et appliquer le style. Voir si tout cela fonctionne. Si elle échoue, vous savez que vous avez un problème avec votre fusion. Si elle réussit, quelque chose au sujet de votre DataTemplate pourrait être le problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top