0

CheckBox.Content是一个ToggleButton和一个Popup。当ToggleButtonis时CheckedPopup显示。在Popup中,存在三个元素。如果我单击一个元素,则Popup应该关闭。

重现问题的步骤:

  1. 单击黑色椭圆,弹出窗口将显示
  2. 单击红色、绿色或蓝色椭圆,弹出窗口不关闭(弹出窗口预计会关闭)

这是我的代码。

<Window x:Class="WpfApplication1.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">
        <CheckBox>
            <DockPanel Panel.ZIndex="2"  HorizontalAlignment="Right">
                <Popup Name="facePopup" DockPanel.Dock="Bottom" StaysOpen="True"  AllowsTransparency="True"
                       Placement="Bottom" VerticalOffset="1"
                       IsOpen="{Binding Path=IsChecked, ElementName=roleFaceButton}" MouseUp="facePopup_MouseUp" >
                    <StackPanel>
                        <Ellipse Fill="Red" Width="18" Height="25"/>
                        <Ellipse Fill="Green" Width="18" Height="25"/>
                        <Ellipse Fill="Blue" Width="18" Height="25"/>
                    </StackPanel>
                </Popup>
                <ToggleButton x:Name="roleFaceButton">
                    <Ellipse Fill="Black" Width="18" Height="25"/>
                </ToggleButton>
            </DockPanel>
        </CheckBox>
</Window>

和代码隐藏

private void facePopup_MouseUp(object sender, MouseButtonEventArgs e)
{
    facePopup.IsOpen = false;
}

我发现如果我CheckBoxBorder代替,我的代码就可以工作。为什么?

4

1 回答 1

1
I find that if I substitute CheckBox by Border, my code will work. Why?

据我所知,您不能将鼠标向上或向下事件添加到复选框,因为它们被 Checked 事件消耗。由于边框没有该默认行为,因此可以添加鼠标事件。您可以尝试使用PreviewMouseLeftButtonDown它应该可以正常启动

于 2013-01-11T13:51:23.197 回答