0

CheckBox.ContentToggleButton一緒Popupです。ToggleButtonがの場合Checkedポップアップが表示されます。にはPopup、3 つの要素があります。1 つの要素をクリックすると、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;
}

BorderCheckBoxで置き換えると、コードが機能することがわかりました。なんで?

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 に答える