Bonjour,
Je tente depuis le début de la semaine de m'initier aux joies du WPF pour remplacer petit à petit mes winforms dans mon applications. Et après avoir vu le fonctionnement général, la plupart des nouveaux composants il m'arrive deux questions sans réponses:
1)J'aimerais faire une feuille de style pour mettre mes styles pour les boutons, checkbox etc. Cependant meme après des nombreuses recherches sur le net, je n'arrive pas à trouver où mettre cette ressource.
J'ai essayé le code suivant dans un usercontrol :
Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 <UserControl x:Class="DesignTest.ressources" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"> <Window> <Window.Resources> <Style x:Key="myStyle" TargetType="Button"> <Setter Property="Background" Value="Orange" /> <Setter Property="FontStyle" Value="Italic" /> <Setter Property="Padding" Value="8,4" /> <Setter Property="Margin" Value="4" /> </Style> </Window.Resources> <StackPanel Orientation="Horizontal" VerticalAlignment="Top"> <Button Style="{StaticResource myStyle}">Styles</Button> <Button Style="{StaticResource myStyle}">are</Button> <Button Style="{StaticResource myStyle}">cool</Button> </StackPanel> </Window> </UserControl>
Il fonctionne bien, cependant si j'utilise le style dans un autre usercontrol (avec <Button Style="{StaticResource myStyle}">) cela ne fonctionne plus. Cela peut paraitre logique, puisqu'il ne sait pas ou rechercher myStyle. Mais je ne vois pas vraiment où le mettre, ce doit être surement évident mais j'ai du mal (mon application est une app winform dans laquelle je vais inclure des usercontrol WPF).
C'est en cela qu'on en vient à mon deuxième point, je vais donc souvent réactualiser mes usercontrols, et donc WPF devra se charger à chaque fois avec ses librairies d'où certaines questions d'optimisations, après diverses recherches sur les forums j'en suis arrivé à faire une solution de la sorte (dans mon code principal):
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 UserControl2 t1 = new UserControl2(); ElementHost host = new ElementHost(); host.Dock = DockStyle.Fill; UserControl3 t3 = new UserControl3();//UserControl WPF t3.canvas1.Children.Add(t1);//t3 ne contient qu'un canvas host.Child = t3; this.Controls.Add(host); this.Controls.Remove(host); t3.canvas1.Children.Clear();//On vide le canvas pour mettre autre chose dedans this.Controls.Add(host);
Là c'est dans un exemple bete, mais je pensais utiliser la variable host en tant que global (ainsi que t3) et faire ainsi. J'ai procédé ainsi car je n'arrivais pas à "vider" host de ses Children. Sur un forum j'ai trouvé quelqu'un qui proposait de créer un control dans lequel on mettrait les autres controles, en effet c'est assez simple mais niveau optimisation de la mémoire c'est bon ?
(en considérant que je déclare host au tout début de mon application et que je le dispose à la fermeture)
J'espère avoir énoncé clairement mes problèmes qui sont très certainement des problèmes de débutant vraiment simples à résoudre.
Merci d'avance,
Partager