【问题标题】:C# WPF Window Width, MaxWidth, MinWidth ignoredC# WPF 窗口宽度、MaxWidth、MinWidth 被忽略
【发布时间】:2011-07-16 16:09:22
【问题描述】:

我在 XAML 中定义了一个 WPF 窗口,如下所示:

<Window x:Class="com.some.company.window"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="My Cool Window" 
x:Name="CoolWindow"
Height="435"
Width="70"
MinWidth="70"
MaxWidth="70"
Left="{PropertyState Default=0}"
Top="{PropertyState Default=0}"
Initialized="InitializeWindow"
ResizeMode="NoResize"  
Style="{DynamicResource DefaultWindow}">
.....
.....
</Window>

问题是当窗口被创建并显示在屏幕上时——它总是大于我在宽度定义中指定的 70 像素。宽度大概是 80-90 像素。我的宽度属性被忽略了。 Window 中的内容也不大于 70 像素。

即使我尝试使用把手调整窗口大小,它也不会让我将其调整到低于特定宽度。是否有某些原因 WPF 不允许我将窗口的宽度设置得更小?每个窗口都有隐藏的最小宽度值吗?我该如何解决这个问题?

编辑: 当我将 WindowsStyle="None" 添加到 Window 属性中时,宽度正确设置为 70 像素。但是,这不是我想要的 Window 样式。

谢谢

【问题讨论】:

  • 可能某些窗口的内容比您当前的窗口大小大?

标签: c# wpf xaml window width


【解决方案1】:

您已将 MinWidth 设置为 70,因此您的 Window 的大小不能小于该值。顺便说一句,因为控制框它的宽度似乎有 132 的最小限制。

如果我们设置WindowStyle="none" 来移除标题和控制框,我们可以让Window 更小。

<Window x:Class="WpfApplicationUnleashed.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:local="clr-namespace:WpfApplicationUnleashed"
        Title="" WindowStyle="None" Width="70">
    <Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    </Grid>
</Window>

编辑

要使窗口宽度为 70,而关闭按钮,标题文本仍然可见且不调整大小,请使用:

<Window x:Class="WpfApplicationUnleashed.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:local="clr-namespace:WpfApplicationUnleashed"
        Title="My Window" WindowStyle="ToolWindow" Width="70" ResizeMode="NoResize">
    <Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    </Grid>
</Window>

由于 70 是一个非常小的宽度,您不能将最小化和最大化按钮与关闭按钮一起使用。

【讨论】:

  • 我希望宽度正好是 70,但是当窗口显示时,它总是在 80-90 像素左右,而不是我想要的 70 像素
  • 按照我的建议删除控制框,然后您可以通过在窗口上设置 Width=70 将宽度设置为 70。
  • 我知道如果我使用 WindowStyle="none",它将尊重宽度 = 70。但是,我不能使用 WindowStyle="none" 因为我的应用程序需要标题栏中的 Windows chrome 和关闭按钮。你指的是什么控制箱?
  • 尝试设置 WindowStyle="ToolWindow" Width="70" ResizeMode="NoResize"。这不会删除关闭按钮。
【解决方案2】:

您指定的 70 不是像素。 WPF 适用于点,它实际上根据屏幕 DPI(每英寸点数)将窗口大小调整为像素。

【讨论】:

  • 我猜他指的是 DIU(Device Independent Units) :)
  • 如果您的桌面缩放(Windows 设置,而不是应用程序设置)设置为 125%,则 WPF 窗口大小(Width、MinWidth、MaxWidth、ActualWidth)为 70 将为 70x1.25=87.5物理像素。有一些方法可以将 WPF 应用程序缩减回硬件像素,但不推荐这样做,因为它会在非常高的 DPI 上下文中导致问题。
【解决方案3】:

我可以通过添加 WindowStyle="ToolWindow" 和 ResizeMode="NoResize" 来做我想做的事。这让我可以保留标题栏和关闭按钮,同时允许将窗口的宽度设置为 70pt。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-30
    • 2011-07-27
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 2012-06-24
    相关资源
    最近更新 更多