Comment obtenir WPF ContentControl de contenu pour étirer?
Je suis en utilisant un ContentControl
à rendre divers UserControl
dérivations de façon dynamique. Je ne peux pas pour la vie de me comprendre comment obtenir le contenu de s'étirer quand j'ai redimensionner le parent Window
. J'ai trouvé beaucoup de références comme cette, mais ça ne marche toujours pas pour moi. Voici un exemple simple:
C'est le Window
XAML:
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary Source="Dictionary1.xaml"/>
</Window.Resources>
<Grid>
<ContentControl VerticalAlignment="Top"
HorizontalAlignment="Left"
VerticalContentAlignment="Stretch"
HorizontalContentAlignment="Stretch"
Content="{Binding Path=ChildView}"
Margin="10"/>
</Grid>
</Window>
Il utilise le fichier de ressources Dictionary1.XAML
:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:viewModels ="clr-namespace:WpfApplication3"
xmlns:views ="clr-namespace:WpfApplication3">
<DataTemplate DataType="{x:Type viewModels:UserControlViewModel}">
<views:UserControl1/>
</DataTemplate>
</ResourceDictionary>
Voici le code derrière pour le principal Window
ainsi que le point de vue des classes de modèle:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainViewModel();
}
}
public class MainViewModel
{
public UserControlViewModel ChildView { get; set; }
public MainViewModel()
{
ChildView = new UserControlViewModel();
}
}
public class UserControlViewModel
{
}
et enfin le contrôle de l'utilisateur:
<UserControl x:Class="WpfApplication3.UserControl1"
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"
Background="Blue"
Height="141" Width="278"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch">
<Grid>
</Grid>
</UserControl>
Voici à quoi il ressemble au moment de l'exécution:
Ce qui me manque ici? Comment puis-je obtenir le contenu enfant à se comporter tel qu'elle reste ancrée en haut/gauche de la mère et le bas/la droite s'étire à mesure que le parent est redimensionné?
Stretch
sur le contentcontrol?Il n'a pas. Il reste centrée au lieu de ancré vers le haut/gauche.
OriginalL'auteur rory.ap | 2015-06-30
Vous devez vous connecter pour publier un commentaire.
Deux choses:
Tout d'abord, vous voulez supprimer la
VerticalAlignment
etHorizontalAlignment
sur votreContentControl
. La définition de ces permettra d'éviter le contrôle du contenu de l'étirement de l'intérieur de son conteneur, de sorteWidth
etHeight
sont respectés, qui sont tous deux à zéro par défaut (si le conteneur n'a pas de taille sur son propre).Réglage
VerticalAlignment
etHorizontalAlignment
àStretch
, ou de les laisser en sortir puisque c'est la valeur par défaut, fera le récipient à remplir la grille, qui est ce que vous voulez.Deuxième, réglage
Width
etHeight
dans leUserControl
va définir sa taille à taille fixe, de sorte qu'il ne sera pas régler lui-même. Supprimer ces attributs et le contrôle de l'utilisateur par défaut est extensible, ce qui lui remplissent le contrôle de contenu.Si vous voulez avoir une certaine taille pour les besoins de la conception, puis de définir la taille de conception à la place de la taille du contrôle. Pour cela, vous avez le
d
espace de noms XAML qui contientDesignWidth
etDesignHeight
propriétés. La définition de ces affectera le concepteur, mais ils sont ignorés plus tard, lorsque la vue est rendue.OriginalL'auteur poke
Vous définissez la
Height
etWidth
propriété de l'objet UserControl. Cela supprime toute marge de manœuvre WPF layouting. Donc, c'est la meilleure chose qu'il peut, qui est le centrage de l'objet UserControl. Si vous supprimez la largeur et la hauteur, il devrait s'étirer comme vous vous attendez.Que pousser gentiment rappelé à moi, vous devez également supprimer
VerticalAlignment="Top"
etHorizontalAlignment="Left"
ah oui, merci pour l'astuce!
OriginalL'auteur Domysee