Il n'est pas surprenant que la marge ne fonctionne pas, parce que la marge est la quantité d'espace à placer autour de le contrôle. Pour une fenêtre, cela signifierait que le cadre soit plus petit (et décalé), et non la zone client, ce qui serait un peu étrange (et pourrait ne pas fonctionner correctement avec l'environnement d'hébergement Win32, pas sûr). Il est un peu surprenant que Padding ne fonctionne pas, et je ne sais pas pourquoi ce serait.
Cependant, il existe une solution que vous pouvez encapsuler dans un style: remplacer la fenêtre par défaut ControlTemplate avec votre propre modèle qui ne respecte la Rembourrage:
<ControlTemplate TargetType="Window">
<Border Background="White" Padding="{TemplateBinding Padding}">
<ContentPresenter />
</Border>
</ControlTemplate>
(Vous voudrez probablement l'arrière-plan de la frontière pour être le pinceau de fond de fenêtre dynamique pour le code de production, mais vous obtenez l'idée.)
Vous pouvez évidemment placer ce modèle dans un sélecteur de modèle de style afin d'éviter d'avoir à le répéter sur chaque fenêtre.
Voici le modèle complet (généré avec Microsoft Expression):
<Style x:Key="WindowStyle" TargetType="{x:Type Window}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Margin="{TemplateBinding Margin}"
Padding="{TemplateBinding Padding}">
<AdornerDecorator>
<ContentPresenter/>
</AdornerDecorator>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="ResizeMode" Value="CanResizeWithGrip">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid>
<AdornerDecorator>
<ContentPresenter/>
</AdornerDecorator>
<ResizeGrip
x:Name="WindowResizeGrip"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
IsTabStop="false"
Visibility="Collapsed"
/>
</Grid>
</Border>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition
Property="ResizeMode"
Value="CanResizeWithGrip"
/>
<Condition
Property="WindowState"
Value="Normal"
/>
</MultiTrigger.Conditions>
<Setter
Property="Visibility"
TargetName="WindowResizeGrip"
Value="Visible"/>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
I essayé, et malheureusement, cela ne fonctionne pas. Je suppose que la raison en est que lorsque vous ciblez une fenêtre avec ControlTemplate.DataType, vous ne ciblez que la classe de base Window mais pas Window1 qui hérite de window. Ai-je tort? En outre, je pense qu'il pourrait être dangereux de jouer avec le modèle car il pourrait contenir d'autres définitions que je vais perdre. Que dire, devrais-je abandonner et faire le plan B? – Shimmy
Hmm, je n'ai pas essayé l'approche de la touche de style par défaut, mais cela fonctionne généralement bien avec les classes dérivées (parce qu'elles héritent de la clé de style par défaut de la classe de base). Mais vous pouvez toujours créer le style en tant que ressource de niveau application et le référencer explicitement via une source statique.Re déconner avec le modèle, hé, c'est ce que les modèles sont pour! \ * grin \ * Si vous avez des doutes, procurez-vous le complément Reflector BAML Viewer et voyez s'il y a un modèle de fenêtre par défaut que vous pouvez adapter (désolé, ne l'avez pas installé ici donc je ne peux pas vérifier moi-même). – itowlson