9
votes

Comment puis-je utiliser WPF d'utiliser un style de fenêtre pour le mode de débogage et un autre en mode de libération?

J'ai deux styles différents pour ma fenêtre:

  1. la fenêtre régulière a la barre de titre et peut être déplacé / redimensionné
  2. Fixe - Fenêtre n'a pas de barre de titre et est fixé au centre de l'écran

    La fenêtre est trop large pour l'un des moniteurs de ma machine de développement, mais c'est un ajustement parfait pour la machine cible / install. Donc, lors du débogage, j'ai besoin de pouvoir déplacer la fenêtre afin que je puisse tout voir, mais lorsque je libère l'application, j'en ai besoin de fonctionner dans le mode "Plein écran" (comme une application PowerPoint en mode projecteur).

    Y a-t-il un moyen de définir la propriété style de la fenêtre sur la base de la compilation du mode de débogage par rapport à la libération? Je pensais que je pourrais être capable d'utiliser une liaison, mais je ne suis pas tout à fait sûr de la mettre en œuvre.


0 commentaires

6 Réponses :


5
votes

Il peut être difficile de le faire dans XAML, mais dans le code réel, vous pouvez simplement faire quelque chose comme: xxx

pourquoi ne pas mettre cela quelque part qui sera exécuté après que le code XAML normal ait été exécuté?


1 commentaires

J'ai suivi cela et c'est une approche qui fonctionne. J'ai trouvé que le code était windowstyle = windowstyle.singleborderwindow comme le code n'a pas fonctionné pour moi



0
votes

Pourriez-vous utiliser un numéro de débogage #IF pour définir une propriété sur une valeur différente et leur lier?

Peut-être p>

#if DEBUG
style = 0;
#else
style = 1;
#endif


1 commentaires

Battus par M. Skeet et son plus gentil, aussi! Mince!



4
votes

Vous pouvez créer une extension de balisage comme celle-ci:

<Window ...
        xmlns:my="clr-namespace:MyNamespace"
        Style="{my:DebugStyle DebugResourceKey=DebugStyle, ReleaseResourceKey=NormalStyle}">


7 commentaires

J'aime ça, mais cela ne compilera pas: une référence d'objet est requis pour le champ non statique de champ, de méthode ou de propriété 'system.windows.application.findresource (objet)' le code incriminé est application.findresource . Ce fichier de classe doit-il être dans la même assemblée que mon application? THX.


Je viens de corriger le code ( application.current.findresource plutôt que application.findresource )


Il peut être dans la même assemblée ou dans une autre. S'il s'agit d'un assemblage différent, vous devez spécifier le nom de l'assemblage dans la déclaration XMLNS.


Merci de la réparatrice. Je remarque un autre problème, même si je ne pense pas que cela ait quelque chose à voir avec votre code. La ligne de code immédiatement après le #else apparaît dans le texte gris et ne répondant pas à IntelliSense. Une idée de ce qui pourrait causer cela? Merci encore.


C'est parce que vous êtes en mode de débogage. L'éditeur sait que ce code ne sera pas compilé (car le symbole de débogage est défini), il le montre donc «code désactivé».


Ohh :) Cela a beaucoup de sens, sauf que je ne comprends pas pourquoi Intellisense ne fonctionnerait pas.


Je suppose que l'éditeur le gère comme une section "NON Code", comme des commentaires ... Si vous souhaitez modifier cette pièce, passez au mode de publication;)



2
votes

Vous pouvez faire une compilation conditionnelle dans le fichier XAML ainsi que le codeBeHind. Consultez cet article

essentiellement, vous Faites-le comme ça dans vos propriétés \ assembléesInfo.cs: p> xxx pré>

Ajoutez votre XMLNS au fichier * .xaml: p>

<mc:Choice Requires="beta">
  <Label>
    This is ALPHA software. Confidential.
    Internal use only. Do not distribute
  <Label>
</mc:Choice>


3 commentaires

À titre de note latérale, la xmlnsdefinition a été ajoutée à Silverlight à la version 4


L'article est cassé malheureusement


Il existe un certain nombre de tutoriels alternatifs à l'article lié. Utilisez simplement votre recherche Internet préférée pour rechercher http://schemas.openxmlformats.org/markup-compatibilittibilité/2006 et "compilation conditionnelle".



15
votes

Créer une classe de sélection de style: xxx

dans votre app.xaml Ajouter à votre application.Resources Votre style de débogage et de libération + une instance de STYSTERPICKER et définissez le relevage et le debugstyle sur les styles de configuration précédents: xxx

dans votre jeu de balisage de la fenêtre up the windowstyle comme ceci: xxx

Vous pouvez réutiliser le débogreleasestestypicker pour définir le style sur n'importe quel autre contrôle non seulement la fenêtre.


1 commentaires

J'aime beaucoup la flexibilité de cette solution. Je pouvais voir utiliser une technique similaire dans d'autres domaines. Merci!



0
votes

Beaucoup de réponses utiles ... j'ai pensé à une autre idée que je pensais jeter là-bas: un convertisseur de valeur plus une liaison:

Voici le convertisseur de valeur: xxx

voici ma déclaration de fenêtre: xxx

ce que cela fait: < / p>

Donc, ce qui se passe ici est que je passe une référence à la fenêtre elle-même dans le convertisseur de valeur et renvoie le style approprié.


0 commentaires