具有Checkbox和Popup的菜单式UI

时间:2014-08-22 06:15:35

标签: wpf binding

我使用Checkbox和Popup创建了一个类似菜单的UI。

<CheckBox Name="Menu" />
<Popup Placement="Top" PlacementTarget="{Binding ElementName=Menu}" IsOpen="{Binding ElementName=Menu, Path=IsChecked}" AllowsTransparency="True"  PopupAnimation="Slide" >
...
</Popup>

当用户点击“菜单”按钮时,弹出窗口显示在按钮上方。再次点击,它会隐藏。

我在这个弹出窗口中创建了一个STYLE,继续;

<Style x:Key="MenuPopup" TargetType="Popup">
    <Setter Property="Placement" Value="Top"/>
    <Setter Property="IsOpen">
        <Setter.Value>
            <Binding Path="IsChecked" Source="PlacementTarget"/>
        </Setter.Value>
    </Setter>
    <Setter Property="AllowsTransparency" Value="True"/>
    <Setter Property="PopupAnimation" Value="Slide" />
</Style>

使用这种风格,代码非常简单;

<CheckBox Name="Menu" />
<Popup PlacementTarget="{Binding ElementName=Menu}" Style="{StaticResource MenuPopup} >
...
</Popup>

但是当用户点击“菜单”按钮时,没有任何事情发生。

Binding的“Source”属性

1 个答案:

答案 0 :(得分:1)

绑定的来源不应该是PlacementTarget,而应该是Popup本身。变化

<Binding Path="IsChecked" Source="PlacementTarget"/>

<Binding Path="PlacementTarget.IsChecked" RelativeSource="{x:Static RelativeSource.Self}"/>

它会起作用。