C# 覆盖标题双击
我试图覆盖在我的WPF应用程序中双击标题栏时发生的情况。我已经尝试过研究这个问题,我希望它尽可能简单,因为它是一个小程序,并且不希望包含任何库。我的想法是,我想双击标题栏,窗口的内容将变得隐藏或可见,如果它是隐藏的。我有一个示例应用程序,它实际上改变了一些事情,比如从WPF中绘制标题栏。但是我想不出来,任何帮助都将不胜感激C# 覆盖标题双击,c#,wpf,C#,Wpf,我试图覆盖在我的WPF应用程序中双击标题栏时发生的情况。我已经尝试过研究这个问题,我希望它尽可能简单,因为它是一个小程序,并且不希望包含任何库。我的想法是,我想双击标题栏,窗口的内容将变得隐藏或可见,如果它是隐藏的。我有一个示例应用程序,它实际上改变了一些事情,比如从WPF中绘制标题栏。但是我想不出来,任何帮助都将不胜感激 <Window x:Class="TestWPF.MainWindow" xmlns="http://schemas.microsoft.com/win
<Window x:Class="TestWPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" ResizeMode="NoResize" WindowStyle="None">
<WindowChrome.WindowChrome>
<WindowChrome CaptionHeight="{Binding ActualHeight,ElementName=Titlebar}"/>
</WindowChrome.WindowChrome>
<DockPanel LastChildFill="True">
<Border Background="DarkGray" DockPanel.Dock="Top" Height="25" x:Name="Titlebar">
<TextBlock Text="{Binding Title, RelativeSource={RelativeSource FindAncestor,AncestorType=Window},FallbackValue=Title}"
Margin="10,0,0,0"
VerticalAlignment="Center">
<TextBlock.Effect>
<DropShadowEffect Color="White" ShadowDepth="3"/>
</TextBlock.Effect>
</TextBlock>
</Border>
<Border BorderBrush="LightGray" BorderThickness="1" Padding="4" x:Name="Content">
<TextBlock Text="Window content" x:Name="Text"/>
</Border>
</DockPanel>
</Window>
好吧,多亏了汉斯·帕桑,我对他提到的内容进行了深入研究,并找到了答案。您需要将以下内容添加到源代码中
private const int WM_NCLBUTTONDBLCLK = 0x00A3;
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
source.AddHook(WndProc);
}
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == WM_NCLBUTTONDBLCLK)
{
//Do stuff here
}
return IntPtr.Zero;
}
这应该只在“无客户端”区域中双击时触发,但正如他所提到的,它不会正常显示,因为没有人希望双击标题栏会做一些不同的事情。我之所以想要它,是因为我需要一种简单的方法来隐藏窗口的内容,并将其折叠到标题栏上,因为您实际上无法调整我的窗口的大小。当您双击它时,当前会发生什么?看起来您的
窗口
没有真正的标题栏,只有一个边框
,里面有一个文本块
。如果您想在双击边框
或文本块
时发生一些事情,您应该能够为该事件添加事件处理程序。很抱歉,如果我尝试将任何事件添加到“标题栏”边框或其任何子项,则根本不会触发。我不知道该如何让它发挥作用。因此,如果我执行了
操作,它将不会调用Titlebar\u MouseDown
方法。这不会直接在WPF中公开,您必须拦截Windows生成的WM\u双击通知。HwndSourceHook.AddHook()是必需的。它没有公开,因为从来没有人期望它能以不同的方式工作。非常感谢你提出这个问题。展示了一些研究成果,非常有用