WPF无边框窗口最大化超过窗口高度和宽度

时间:2012-10-14 18:04:03

标签: wpf controltemplate borderless

我创建了一个无边框窗口模板,以便所有窗口看起来都一样。模板代码如下所示:

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

我的风格看起来像这样:

    <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>

现在当应用程序以最大化状态运行时,我观察到的是窗口超出了屏幕空间。假设我是1600 x 900,我的最大工作区域是1600 x 900,但应用程序采用这样的方式:1614 x 914.另外,使用WPF Inspector,我观察到的是Top和Left位置是负数。在我的案例中它显示为'-7'。

我不确定,我哪里错了?有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

ResizeMode设置为NoResize而不是CanResizeWithGrip。这将删除调整大小边框,虽然不可见,但显然会考虑尺寸计算。

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

答案 1 :(得分:0)

尝试:

    <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>

保证金= 7将成功。 :)