9
votes

XAML: Comment changer de couleur d'arrière-plan uniquement en mode de conception?

J'ai un contrôle avec une couleur de premier plan de texte blanc et une couleur de fond transparente. Plus tard, sur cette USERCONTROL sera ajouté à un contrôle différent qui porte la couleur de fond réelle.

Cependant, pendant la conception de cela, le contrôle du premier plan blanc sur fond blanc dans VS 2010, je ne peux évidemment rien voir. De toute façon, de toute façon définir une couleur différente pour le moment de la conception?

J'ai essayé ceci: xxx

mais cela ne fonctionne pas. Toute astuce?

mise à jour:

Je ne comprends pas comment cela fonctionne pour vous les gars. J'ai créé une nouvelle application Silverlight 4.0 et j'ai inséré cette ligne de code dans le CTOR: xxx

Quand je vais dans designer, je ne le vois toujours pas comme bleu. Et je n'ai même pas d'état IsindesignTime là-bas. Ce qui me manque ici?

merci, Kave


3 commentaires

Où avez-vous appelé le code ci-dessus?


Andrei, je l'ai appelé dans la CTOR après l'initializeComonent ()


Le meilleur moyen consiste à définir D: propriété de conception comme décrit dans Cette réponse


6 Réponses :


0
votes

Vous pouvez utiliser le code suivant dans USERCONTROL Constructor:

pour WPF STRY>: P>

if (DesignerProperties.GetIsInDesignMode( this ))
{
    LayoutRoot.Background = new SolidColorBrush( Colors.Blue );
}


3 commentaires

Ce Silverlight est-il compatible? Désolé j'aurais dû dire son Silverlight 4.0


Merci beaucoup. Mais cela ne fonctionne toujours pas de la vue de designer d'UserControl. Cependant, une fois que j'ouvre la vue parent contenant cette vue en mode de concepteur, je peux voir la couleur bleue remplace la couleur réelle. Pourquoi le code temporel de conception de l'enfant n'est-il pas affecté par cela?


Comme vous changez de couleur de fond, je pense que vous devez également mettre en œuvre le même comportement dans d'autres contrôles. Je suggérerais d'utiliser une opacité si vous n'avez besoin que de cacher le contrôle (juste une pensée).



3
votes

Voici une façon:

#if DEBUG
if (System.ComponentModel.DesignerProperties.IsInDesignTool)
{
    LayoutRoot.Background = new SolidColorBrush(Colors.Yellow);
}
#endif


2 commentaires

Merci pour votre réponse. Puissiez-vous lire ma mise à jour dans le poteau? Merci beaucoup pour votre aide


Ajout d'une mise à jour (dernier paragraphe) pour aider à résoudre ce que je crois me passe. Le code de l'UserControl actuellement édité n'exécute pas au moment de la conception. Vous ne verrez jamais le travail «bleu» si vous ne l'avez défini que dans Code-derrière, si le contrôle n'est pas contenue dans un deuxième contrôle.



1
votes

Une option serait de donner à l'UserControl une couleur d'arrière-plan, puis remplacer cela où vous l'utilisez. Donc, lorsque vous modifiez l'UserControl isolément, il aurait une couleur de fond; Mais lorsque vous émettez un contrôle contenant cet UserControl, vous le verriez avec le fond transparent comme vous le souhaitez.

Donc, le fichier XAML de UserControl ressemblerait à ceci: P>

<my:MyUserControl Background="Transparent" ...>


0 commentaires

0
votes

Bon fil, surtout lorsque vous faites du MVVM le fait que UserControls apparaissent sur blanc quand ils sont transparents est très gênant.

Je suis sûr que vous pourriez le faire en mélange avec un état défini sur la base d'un concepteur, mais je ne pense pas que cela réduirait la quantité de travail. p>

Vous ne savez toujours pas comment éviter le code dans le code derrière et em> évitez de devoir ouvrir un mélange, de sorte que quelqu'un a des suggestions grâce à l'avance pour la publication. P>

Je suggérerais d'utiliser l'opacité p> BlockQuote>

public View() {
    InitializeComponent();

    var c = Content as Panel;
    if (c != null) c.Background = new SolidColorBrush(Colors.Transparent);
}


0 commentaires

1
votes

Une autre approche qui n'implique pas de code:

  1. Installez l'éditeur de thème de la couleur "Visual Studio 2012" trouvé ici: http://visualsturogallery.msdn.microsoft.com/366ad100-0003-4c9a -81A8-337D4E7ACE05
    • ou pour vs 2010: http://visualsturogallery.msdn.microsoft.com/20CD93A2-C435-49F16402378 < / a>
    • Créez un nouveau thème personnalisé basé sur celui que vous souhaitez modifier.
    • Cliquez sur le bouton Filtre "Afficher tous les éléments" en haut à gauche de l'éditeur de thème
    • Tapez "Artboard" dans la zone de recherche en haut à droite de l'éditeur de thème
    • Définissez le " cidre -> Artboardbackground " couleur à une couleur différente de votre choix.
    • yay! : D

      Remarque: le champ " cidre -> Artboardbackground" / "> Le champ de thème de couleur est trouvé dans VS2012 mais je ne peux pas confirmer s'il a le même nom dans VS2010


0 commentaires

0
votes

Une autre technique mentionnée dans cette question à cette question consiste à utiliser la propriété non documentée D: designâropersâties.designstyle code> , qui fonctionne bien pour appliquer un style de design-time à un fort> contrôle unique fort>, mais qui ne semble pas fonctionner pour un style style code> dans un Dossédictionner qui s'appliquerait à tous les em> des contrôles ou des éléments dacteusement saisis sous la portée du dictionnaire.

Pour résoudre ceci, sur cette même page Fournissez une solution simple pour le déploiement d'un style de designer uniquement dans un dossier code>. Voici un résumé de cette réponse: p>


Premièrement, placez le style souhaité dans un dictionnaire XAML de la manière normale. P> xxx pré>

alors, Dans le code C #, Supprimez le style du ResourceÂDictAionary CODE> Lorsque le mode de conception est non fort> détecté em>. Fais ceci est dans le Oninitialisé code> Remplacement: P>

protected override void OnInitialized(EventArgs e)
{
    if (DesignerProperties.GetIsInDesignMode(this) == false)
        Resources.Remove(typeof(TreeViewItem));

    base.OnInitialized(e);
}


0 commentaires