使WPF窗口的一部分点击,而不是它的控件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使WPF窗口的一部分点击,而不是它的控件相关的知识,希望对你有一定的参考价值。

为了实现阴影效果,我的窗口比其主要内容略大,周围有透明的“边框”。我很好奇是否有可能使这个不可见的边框(图像中的彩色部分)仅通过点击进入,并防止主要内容被点击。

enter image description here

该主题解释了如何使整个窗口点击:Making a WPF window click-through, but not its controls

有没有办法让这种方法适应我打算实现的目标?

答案

只有一个完全透明背景的窗口才能真正点击。对于半透明窗口,您可以例如在单击阴影时自己最小化窗口,例如:

private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    if (e.OriginalSource == outer)
        WindowState = WindowState.Minimized;
}

XAML:

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="300" Width="300"
        AllowsTransparency="True" WindowStyle="None">
    <Window.Background>
        <SolidColorBrush Color="Red" Opacity="0.3" />
    </Window.Background>
    <Grid x:Name="outer" Background="Transparent" MouseLeftButtonDown="Grid_MouseLeftButtonDown">
        <Grid Background="Silver" Margin="10">
            <TextBlock>GUI</TextBlock>
        </Grid>
    </Grid>
</Window> 

以上是关于使WPF窗口的一部分点击,而不是它的控件的主要内容,如果未能解决你的问题,请参考以下文章

WPF中怎么使slider控件的值只取整数?

WPF中怎么使slider控件的值只取整数?

在WPF中怎么样实现Button点击事件使那个星星向淘宝那样子逐次变色呢?

请教wpf中的用户控件,如何模拟出它的close事件

如何在WPF窗口中使用WinRT SwapChainPanel控件?

C# wpf 想让控件随着窗口大小变化而变化