2 votes

Les DataTemplates dans les dictionnaires de ressources n'héritent pas des styles app.xaml ?

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

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

De même, les styles par défaut (c'est-à-dire les styles sans nom qui s'appliquent à l'ensemble de l'application) ne s'appliquent pas aux é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>

Voici un exemple de 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>

Des idées ? Dois-je fusionner les dictionnaires d'une autre manière ?

3voto

redjackwong Points 931

Le code ne fonctionnera pas correctement parce que le DataTemplate dans le dictionnaire de ressources ne sait pas lequel l'utilise, il se contente de a été utilisé. Comme le mode Hollywood. Ils ont été compilés séparément.

Pour que cela fonctionne, vous pouvez placer votre style qui se trouve dans app.xaml dans le même dictionnaire de ressources que le DataTemplate ou, si vous n'aimez pas ce couplage, vous pouvez le placer dans un autre dictionnaire de ressources et le fusionner avec le dictionnaire de ressources du modèle de données. .

1voto

devuxer Points 15633

L'action de construction de votre App.xaml devrait être ApplicationDefinition, et l'action de construction de vos fichiers Resource Dictionary devrait être Page. Je suppose que ces deux actions sont correctes parce qu'elles sont par défaut (et je vois que vous avez déjà parlé de Page).

Je ne vois pas d'autre problème dans votre situation. Tant que vos ressources statiques sont définies dans le bon ordre, ce qui semble être le cas, il devrait être en mesure de les trouver lorsque vous exécutez votre application.

Editar

Idée de débogage : Créer un nouveau dictionnaire de ressources appelé "TestDictionary.xaml" avec un style de bouton simple. Assurez-vous que ce dictionnaire se trouve dans le même dossier que vos autres dictionnaires (DataTemplate1.xaml, etc.). Placez un lien vers le seul dictionnaire TestDictionary dans le fichier MergedDictionaries (commenter les autres). Mettez un bouton sur votre fenêtre de démarrage et appliquez le style. Voyez si cela fonctionne. Si cela échoue, vous savez que vous avez un problème avec votre fusion. S'il réussit, c'est qu'il y a quelque chose dans votre DataTemplate pourrait être le problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X