WPF UserControl Moment de la Conception de la Taille
Lors de la création d'un UserControl dans WPF, je trouve ça pratique pour lui donner un certain arbitraire, la Hauteur et la Largeur, de sorte que je peux afficher mes modifications dans le concepteur Visual Studio. Quand je lance la commande, cependant, je veux la Hauteur et la Largeur d'être défini, de sorte que le contrôle doit s'étendre à remplir tout ce conteneur je le place dans. Comment puis-je réaliser cette même fonctionnalité sans avoir à retirer la Hauteur et la Largeur des valeurs avant la création de mon contrôle? (Ou sans l'aide de DockPanel dans le conteneur parent.)
Le code suivant illustre le problème:
<Window x:Class="ExampleApplication3.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:loc="clr-namespace:ExampleApplication3"
Title="Example" Height="600" Width="600">
<Grid Background="LightGray">
<loc:UserControl1 />
</Grid>
</Window>
La définition suivante de UserControl1
affiche raisonnablement au moment de la conception, mais s'affiche comme une taille fixe au moment de l'exécution:
<UserControl x:Class="ExampleApplication3.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300">
<Grid Background="LightCyan" />
</UserControl>
La définition suivante de UserControl1
affiche comme un point au moment de la conception, mais s'agrandit pour remplir le parent Window1
au moment de l'exécution:
<UserControl x:Class="ExampleApplication3.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid Background="LightCyan" />
</UserControl>
Vous devez vous connecter pour publier un commentaire.
Dans Visual Studio ajouter la Largeur et la Hauteur de l'attribut de votre UserControl XAML, mais dans le code-behind insérer cette
Cette fonction vérifie si le contrôle est en cours d'exécution en mode création. Si non (runtime), qui va définir la Largeur et la Hauteur de NaN (Pas un nombre) qui est la valeur que vous définissez si vous supprimez les attributs Width et Height dans le code XAML.
Ainsi, au moment de la conception, vous aurez le préréglage de la largeur et de la hauteur (y compris si vous placez le contrôle de l'utilisateur dans un formulaire) et à l'exécution, il accostera en fonction de son conteneur parent.
Espère que ça aide.
De Mélange, une petite astuce consiste à ajouter ces attributs à votre usercontrol ou de la fenêtre:
Ceci permettra de définir la hauteur et la largeur de 500 et 600 respectivement. Toutefois, cela ne fonctionne que pour le mélange designer. Pas le Concepteur Visual Studio.
Autant que le Concepteur Visual Studio votre technique est tout ce qui fonctionne. C'est pourquoi je n'utilise pas le Concepteur Visual Studio. 😉
Voici une liste de Les Attributs de conception dans le Concepteur Silverlight. Ils sont les mêmes pour le concepteur WPF.
Il répertorie tous les
d:
valeurs disponibles dans le Concepteur, tels qued:DesignHeight
,d:DesignWidth
,d:IsDesignTimeCreatable
,d:CreateList
et plusieurs autres.Je le fais tout le temps. Il suffit de définir les valeurs de largeur et hauteur sur "auto" lorsque vous instanciez votre contrôle, et cela va remplacer la conception des valeurs pour le temps que UserControl.
ie:
<loc:UserControl1 Width="auto" Height="auto" />
Une autre option est de définir une combinaison de MinWidth et MinHeight à une taille qui permet la conception, le travail à temps, tandis que la Largeur et la Hauteur de rester "auto". Évidemment, cela ne fonctionne que si vous n'avez pas besoin de l'objet UserControl de taille plus petite que le minimum des valeurs lors de l'exécution.
J'étais à la recherche de solution similaire comme celui utilisé dans le Mélange et avec vos mentions j'ai créé comportement simple classe avec deux propriétés attachées Largeur & Hauteur qui sont appliquées que dans des DesinTime
Puis dans votre UserControl que vous venez de définir ces propriétés dans le code Xaml
Utilisation MinWidth et MinHeight sur le contrôle. De cette façon, vous le verrez dans le designer, et à l'exécution, il sera de la taille de la façon dont vous le souhaitez.
Je le fais similaire, mais ma solution assure que si vous ajoutez à votre contrôle d'un conteneur en mode de conception, il apparaît raisonnable.
qu'en pensez-vous?
Grâce à l'originalité de répondeur pour cette solution! Pour ceux qui sont intéressés, ici, il est en VB:
Certains ont suggéré d'utiliser l'LicenseManager.UsageMode bien que je n'ai jamais vu avant, mais j'ai utilisé le code suivant.
esskar,
Je tiens juste à ajouter que vous devriez toujours faire appel à la méthode de la base lors de la substitution d'une "Sur" la méthode.
Grand contournement par le chemin, je l'utilise moi-même maintenant.