3

有没有办法找出一个事件(或属性或方法或类似的东西)来检测窗口停靠到左侧或右侧?

描述:

  • 使用 WindowState 属性,您可以发现,当您在正常 / 最小化 / 最大化这三个状态之间更改窗口时。在 Windows 7 之后,您可以有“Dock To Left”和“Dock To Right”两种停靠方式。我在 Window Class 中找不到任何属性或事件。
  • 您可以使用WinKey + Left将 Window 停靠到左侧,或者使用WinKey + Right将 Window 停靠到右侧。

问题:

停靠到左侧或右侧后,我需要在窗口中进行一些更改。我需要 WPF/XAML 中的一个触发器,但我找不到任何与左/右停靠相关的属性或事件。

4

3 回答 3

2

没有任何特殊事件,因为“停靠”到左/右不是像最小化/最大化这样的特殊操作,只是重新定位窗口的一种特殊方式。用户可以通过恢复、移动和调整窗口大小来精确地模拟“停靠”。因此,您的 UI 逻辑似乎有问题。想象一下,用户恢复窗口,然后调整它的大小,使它在靠近屏幕右边缘的地方填满大约半个屏幕。应该发生什么?

Protip:可能有多个显示器,您的窗口可能跨越它们。

于 2013-08-09T03:57:48.617 回答
1

在 SizeChanged 事件中,您可以检测窗口是否停靠:

bool isDocked = 
     window.WindowState == WindowState.Normal &&
     window.Width != window.RestoreBounds.Width &&
     window.Height != window.RestoreBounds.Height

至少,这是一个很好的指标。

于 2019-09-18T08:06:57.990 回答
0

我在它的模板中在我的窗口周围做了这个:

<Border BorderBrush="Transparent" BorderThickness="5" Margin="-5"
        Effect="{DynamicResource ShadowEffect}">
  <...>
</Border>

负边距否定边框厚度。

于 2019-03-19T10:35:05.013 回答