Bonjour,
J'aimerai que ma classe Window1 hérite d'une classe CustomWindow<T> (générique) au lieu de Window. Est-ce possible en WPF ?
Merci.
Bonjour,
J'aimerai que ma classe Window1 hérite d'une classe CustomWindow<T> (générique) au lieu de Window. Est-ce possible en WPF ?
Merci.
****************************************
- I don’t write plumbing code anymore
- I use PostSharp
- And you?
****************************************
A priori, je dirais oui: tu as essayé ? Tu as des erreurs ?
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Heu, le truc c'est que je ne sais pas comment on fait ? J'ai essayé de changer la classe mère dans le code behind, mais le code est écrasé à la compilation (le code généré par le XAML écrase mon code).
****************************************
- I don’t write plumbing code anymore
- I use PostSharp
- And you?
****************************************
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Non. A la compilation, le XAML régénère le code behind et CustomWindow<T> est écrasé et remplacé par Window...
****************************************
- I don’t write plumbing code anymore
- I use PostSharp
- And you?
****************************************
Salut,
vu que les classes sont partielles, il faut changer le nom et la classe de base dans le fichier cs et dans le fichier du designer (Vu qu'on ne peut y acceder normalement, clic droit sur InitializeComponents et 'Go to definition').
Je viens d'essayer, ca marche sur ma machine.
Oui mais quand on recompile, le nom de classe de ma base est écrasée par "Window" (du moins chez moi...)
****************************************
- I don’t write plumbing code anymore
- I use PostSharp
- And you?
****************************************
Etrange car si tu change la classe de base dans le fichier .cs et dans le designer.cs, il devrait pas avoir ce comportement. Tu me une exception, possible mais renommer en Window, c'est pas normal.
J'avais déjà fait le test avec la Beta 2 de VS 2008 et ca marchait bien (bon ok, je n'héritais pas d'une classe générique)
Tu as essayé de faire un clean de ta solution avant de builder ?
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Pourquoi parles-tu de 2 fichier .cs : le fichier .cs et dans le designer.cs
Je change le nom de la classe de base dans le fichier Window1.g.cs et celui-ci est écrasé par "Window" à chaque compilation même en ayant fait un clean juste avant...
****************************************
- I don’t write plumbing code anymore
- I use PostSharp
- And you?
****************************************
C'est etrange comme comportement.
Pour ma part, sur la release 2008 express, si je change le Window en Window1<string> par exemple, le compilo m'insulte ("Partial declarations of 'WpfApplication1.Window1' must not specify different base classes"), mais ne change rien.
Pour les cs, pour que ca marche il faut changer le code de la form (window1.xaml.cs) et le code designer (window1.g.cs).
Ok donc on va reprendre depuis le début: les fichiers .g.cs, ce sont les fichiers générés par le compilateurs lorsqu'il prend le XAML, le convertit en C# et le mixe avec le fichier de code behind associé. Si tu modifies ce fichier, il n'est pas surprenant qu'il soit remodifié car si tu ne change pas le reste dans le XAMl et/ou le fichier de code, c'est comme si tu n'avais rien fait...
Ce que tu veux faire est possible: regarde comment j'ai fait ici:
https://connect.microsoft.com/feedba...997&SiteID=477
Seul problème que j'avais (et qui est un bug): l'intellisense ne marche pas/plus.
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Ton lien n'est plus valide :
Si je modifie le fichier .xaml.cs (en ajoutant le nom de la classe de base générique) et le fichier .g.cs (en modifiant le nom de la classe de base), j'obtiens la même erreur que SirJulio.Le contenu que vous avez demandé est introuvable ou vous ne disposez pas des autorisations nécessaires pour le consulter.
****************************************
- I don’t write plumbing code anymore
- I use PostSharp
- And you?
****************************************
Juste pour etre precis, j'ai l'erreur uniquement si je change qu'un seul des deux fichiers. En changeant les deux, ca passe, compile et tourne sans probleme.
D'ailleurs, il n'y aurait pas dans VS pas_express, un wizard pour ajouter une nouvelle form qui herite d'une form existante (il me semblait que ca existait sous 2005) ?
Moi j'ai l'erreur quand je modifie les 2 fichiers...![]()
****************************************
- I don’t write plumbing code anymore
- I use PostSharp
- And you?
****************************************
Arf, mince.
Voila les étapes qu'il y a dans le lien:
- Create a new WPF application
- Create a simple class named Common (and which inherit from Window):
public class Common : Window
{
public Common()
: base()
{ }
}
- In Window1.xaml.cs, remplace :
public partial class Window1 : Window
by:
public partial class Window1 : Common
- Replace the content of Window1.xaml by this one:
<local:Common x:Class="HeritageWindiwsFormsWPF.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:HeritageWindiwsFormsWPF"
Title="Window1" Height="300" Width="300">
<Grid>
</Grid>
</local:Common>
The application compiles and runs fine. But when you go at the first <local: and you press Control+Space, Intellisense does not display all the types (Common and Window1)availabe
In the grid, if you add:
<local:
you will see that intellisense is working fine
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Là tu modifies le XAML, mais je pense que je ne peux pas le faire avec une classe générique, non ?
****************************************
- I don’t write plumbing code anymore
- I use PostSharp
- And you?
****************************************
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Je ne pense, rien dans le XAML ne permet de définir un type générique. Si on reprend ton exemple tu ne peux avoir de
Si dans ton XAML tu ne peux pas gérer le type parametre du générique le compilateur lors de la conversion XAML/C# ne peux savoir qu'il faut un générique ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2<local:Common<T> x:Class="HeritageWindiwsFormsWPF.Window1<T>" ... />
- MVP C#![]()
-Tout problème a une solution, le vrai problème est de trouver la solution .....
- Linux & mono : l'avenir![]()
Sur le principe, je suis d'accord. Maintenant, il est toujours possible de voir si en créant sa propre MarkupExtension cela peut fonctionner. Un truc du genre:
<local:{CustomExtension Common<T>} x:Class="HeritageWindiwsFormsWPF.Window1<T>" ... />
Je garantie pas que cela marche mais cela se tente à l'occasion![]()
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Mais pourtant dans les précédents posts, vous arriviez à faire hériter d'une classe générique sans modifier le XAML n'est ce pas ? (En modifiant seulement le fichier .cs et le fichier .cs généré)
****************************************
- I don’t write plumbing code anymore
- I use PostSharp
- And you?
****************************************
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager