用户单击它时关闭WPF弹出窗口

时间:2012-09-25 15:03:59

标签: wpf xaml mvvm popup

如何在单击其内容时关闭以下弹出窗口?

<Button Name="myButton" Content="Hover to open" />
<Popup PlacementTarget="{Binding ElementName=myButton}" Placement="Bottom">
    <Popup.Resources>
        <DataConversion:BooleanOrConverter x:Key="booleanOrConverter" />
    </Popup.Resources>            
    <Popup.IsOpen>
        <MultiBinding Mode="OneWay" Converter="{StaticResource booleanOrConverter}">
            <Binding Mode="OneWay" ElementName="myButton" Path="IsMouseOver"/>
            <Binding RelativeSource="{RelativeSource Self}" Path="IsMouseOver" />
        </MultiBinding>
    </Popup.IsOpen>
    <!-- some content here -->
</Popup>

我想避免在代码隐藏文件中编写代码,并将视觉和行为方面的东西(如IsOpen属性或MouseDown事件)绑定到ViewModel。

2 个答案:

答案 0 :(得分:2)

您需要在EventTriggerPopup触发一个包含BooleanAnimationUsingKeyFrames的{​​{1}}的故事板,其中IsOpen设置为falsesimilar to this。更容易使用代码隐藏; o)

答案 1 :(得分:2)

您可以将Popup.Child设为Button(将其设置为不一样),处理其Click事件并将IsOpen设置为false (最好使用SetCurrentValue来破坏绑定)。

您可以在后面的代码中执行此操作,也可以使用行为/触发器操作。