2012-10-14 2 views
1

J'ai créé un modèle de fenêtre sans bordure afin que toutes les fenêtres aient la même apparence. Le code du modèle ressemble à ceci:Fenêtre sans bordure WPF sur la valeur maximale de la hauteur et de la largeur de la fenêtre

public abstract class WindowBase : Window 
{ 
    static WindowBase() 
    { 
     DefaultStyleKeyProperty.OverrideMetadata(typeof(WindowBase), new FrameworkPropertyMetadata(typeof(WindowBase))); 
    } 
} 

Et je un style qui ressemble à ceci:

<Style TargetType="{x:Type WindowBase}"> 
     <!--<Setter Property="Topmost" Value="True" />--> 
     <Setter Property="WindowStyle" Value="None" /> 
     <Setter Property="Background" Value="White"/> 
     <Setter Property="ResizeMode" Value="CanResizeWithGrip" /> 
     <Setter Property="WindowState" Value="Maximized" /> 
     <Setter Property="AllowsTransparency" Value="True"/> 
     <Setter Property="SnapsToDevicePixels" Value="true"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Window}"> 
       <Border Margin="0" BorderThickness="1"> 
        <Grid> 
         <Grid Background="White" Visibility="Visible"> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="1.5*"/> 
           <RowDefinition Height="10*"/> 
          </Grid.RowDefinitions> 
          <ContentPresenter Grid.Row="0" Grid.RowSpan="2"/> 
         </Grid> 
         <ContentPresenter /> 
         <ResizeGrip Name="ResizeGroup" VerticalAlignment="Bottom" HorizontalAlignment="Right" KeyboardNavigation.IsTabStop="False"/> 
        </Grid> 
       </Border> 
       <ControlTemplate.Triggers> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="ResizeMode" Value="CanResizeWithGrip"/> 
          <Condition Property="WindowState" Value="Maximized"/> 
         </MultiTrigger.Conditions> 
         <Setter Property="Visibility" TargetName="ResizeGroup" Value="Collapsed"/> 
        </MultiTrigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Maintenant, lorsque l'application fonctionne dans un état maximisé ce que j'ai observé est la fenêtre supérieure à l'écran espace. Supposons que je suis en 1600 x 900, ma zone de travail maximale serait 1600 x 900, mais l'application prend quelque chose comme ceci: 1614 x 914. En utilisant WPF Inspector, j'ai remarqué que la position Haut et Gauche est en négatif. Il apparaît comme '-7' dans mon cas.

Je ne suis pas sûr, où je vais mal? Quelqu'un peut-il aider?

Répondre

1

Définissez ResizeMode sur NoResize au lieu de CanResizeWithGrip. Cela supprimera la bordure de redimensionnement, qui est apparemment prise en compte pour le calcul de la taille, bien que non visible.

<Style TargetType="{x:Type WindowBase}"> 
    ... 
    <Setter Property="ResizeMode" Value="NoResize" /> 
    ... 
</Style> 
+1

Essayé cela, mais il n'a pas eu de chance :( –

+0

Avez-vous également essayé de le définir explicitement lors de la création de la fenêtre, comme ''? – Clemens

0

Essayez:

<ControlTemplate.Triggers> 
        <Trigger Property="IsActive" Value="True"> 
         <Setter Property="BorderBrush" Value="{DynamicResource WindowBorderActive}" /> 
        </Trigger> 
        <Trigger Property="WindowState" Value="Maximized"> 
         <Setter TargetName="Maximize" Property="Visibility" Value="Collapsed" /> 
         <Setter TargetName="Restore" Property="Visibility" Value="Visible" /> 
         <Setter TargetName="LayoutRoot" Property="Margin" Value="7" /> 
        </Trigger> 
        <Trigger Property="WindowState" Value="Normal"> 
         <Setter TargetName="Maximize" Property="Visibility" Value="Visible" /> 
         <Setter TargetName="Restore" Property="Visibility" Value="Collapsed" /> 
        </Trigger> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="ResizeMode" Value="CanResizeWithGrip" /> 
          <Condition Property="WindowState" Value="Normal" /> 
         </MultiTrigger.Conditions> 
         <Setter TargetName="ResizeGrip" Property="Visibility" Value="Visible" /> 
        </MultiTrigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 

Marge = 7 fera l'affaire. :)

Questions connexes