切换弹出内容wpf

切换弹出内容wpf,wpf,xaml,popup,toggle,Wpf,Xaml,Popup,Toggle,这就是我要做的 切换按钮1(editNameOpen) 选中后,显示弹出内容 关闭它的唯一方法是从弹出窗口内的另一个切换按钮(editNameClose)关闭 切换按钮2(editNameClose) 这是弹出窗口的内部 选中后,关闭弹出窗口并关闭editNameOpen 这里有一些xaml,我正在使用它来尝试解决问题。到目前为止的问题: 我的多重绑定错误,并引发运行时错误“无法设置多重绑定,因为必须指定多值转换器”。在这种情况下,多值转换器将转换什么 当选中第二个切换按钮时,如何关闭第

这就是我要做的

切换按钮1(editNameOpen)
  • 选中后,显示弹出内容
  • 关闭它的唯一方法是从弹出窗口内的另一个切换按钮(editNameClose)关闭
切换按钮2(editNameClose)
  • 这是弹出窗口的内部
  • 选中后,关闭弹出窗口并关闭editNameOpen
这里有一些xaml,我正在使用它来尝试解决问题。到目前为止的问题:

  • 我的多重绑定错误,并引发运行时错误“无法设置多重绑定,因为必须指定多值转换器”。在这种情况下,多值转换器将转换什么
  • 当选中第二个切换按钮时,如何关闭第1个切换按钮
  • 干杯,
    贝里尔

    
    **打开并保持打开状态,直到选中editNameClose
    **当选中editNameClose时,如何将editNameOpen重置为未选中?
    **如何将editNameClose重置为未选中,然后在再次打开时将editNameClose重置为未选中?
    
    我个人会将
    Popup.IsOpen
    和两个
    切换按钮
    绑定到
    数据上下文中的单个布尔属性

    因此,当选中第一个
    切换按钮时,它将布尔值设置为
    true
    ,这使得
    Popup.IsOpen
    计算为
    true
    ,并打开
    弹出窗口

    第二个
    切换按钮
    可能需要使用
    转换器
    来反转布尔属性,因此当
    IsOpen=true
    时,它显示为未选中,选中它将使
    IsOpen=false
    ,这将自动关闭
    弹出窗口
    ,并取消选中第一个
    切换按钮

    至于您得到的错误,
    MultiBinding
    需要类型为
    IMultiValueConverter
    Converter
    ,因为您无法将一个属性绑定到两个单独的值。您需要一个转换器将这些值转换为您可以使用的单个值

    如果您确实想这样做,而不是使用
    DataContext
    中的属性,请尝试将
    Popup
    IsOpen
    属性与
    切换按钮的
    IsChecked
    属性绑定在一起

    <Popup x:Name="popupNameEditingControl"
           IsOpen="{Binding IsChecked, ElementName=editNameOpen, Mode=TwoWay}"
           ... >
        ...
        <ToggleButton x:Name="editNameClose" Content="X"
                      IsChecked="{Binding IsChecked, ElementName=editNameOpen, 
                          Converter={StaticResource ReverseBooleanConverter}, Mode=TwoWay}" />
        ...
    </Popup>
    
    
    ...
    ...
    
    我最初是用虚拟机来控制这一点的,然后决定这真的是一个只查看的事件。虽然这听起来很简单,但我将首先使用仅视图方法,至少作为练习。干杯,如果你有一个如何弹出的概念。风格应该看起来会喜欢看到它@我个人讨厌WPF内置的弹出控件,通常使用我自己的自定义
    UserControl
    。如果你是,你可以找到代码interested@Berryl我还添加了一个代码示例,用于将
    IsOpen
    IsChecked
    属性绑定到我的答案中
    <Popup x:Name="popupNameEditingControl"
           IsOpen="{Binding IsChecked, ElementName=editNameOpen, Mode=TwoWay}"
           ... >
        ...
        <ToggleButton x:Name="editNameClose" Content="X"
                      IsChecked="{Binding IsChecked, ElementName=editNameOpen, 
                          Converter={StaticResource ReverseBooleanConverter}, Mode=TwoWay}" />
        ...
    </Popup>