【问题标题】:Hide border and child controls on mouse left button click outside in WPF在WPF外部单击鼠标左键时隐藏边框和子控件
【发布时间】:2017-12-29 07:45:08
【问题描述】:

我有以下边框:

    <Border CornerRadius="10,10,0,0" Height="23" 
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            BorderBrush="DarkBlue" 
            BorderThickness="1"  
            Background="AntiqueWhite">
            <StackPanel  Orientation="Horizontal" 
                         HorizontalAlignment="Center">
                <Image Source="/Resources/Info_48.png" 
                       Height="20" 
                       Width="20" 
                       Stretch="Fill"/>
                <TextBlock Width="90" 
                           VerticalAlignment="Center" 
                           HorizontalAlignment="Left" 
                           Background="Transparent" 
                           FontSize="12">
                     <Run Text="This is a Popup simulation"/>
                 </TextBlock>
            </StackPanel>
    </Border>

显示面板时,此边框可见。一旦边框和子组件显示出来,它们将在鼠标点击窗口中的任何位置时自动隐藏。

我要做的是检测边框及其子组件之外的鼠标单击事件。一旦在外面检测到点击,我需要在 StaysOpen=false 时隐藏边框及其子组件,类似于弹出窗口,并且在鼠标点击时自动隐藏。

如何检测控件外的鼠标点击?

【问题讨论】:

    标签: c# wpf xaml .net-3.5 border


    【解决方案1】:

    通过更改颜色等设置边框的样式为可见或隐藏边框。

    <Border  Background="Transparent" 
         Height="18" Width="18">
     <Border.Style>
        <Style Target-type="Border">
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="visibility" Value="false" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Border.Style>
    

    【讨论】:

    • 这不是我想要的。当用户单击控件外的任何位置时,我想隐藏边框及其所有子组件。例如,创建一个弹出控件并将 StaysOpen 设置为 false,然后单击弹出控件外部的任何位置,看看会发生什么:当您单击外部弹出控件时,我想要相同的行为。在您的示例中,它在鼠标悬停时隐藏。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 2019-01-16
    • 2011-09-20
    相关资源
    最近更新 更多