0

これが私がやろうとしていることです。

トグルボタン1(editNameOpen)

  • チェックすると、ポップアップコンテンツを表示します
  • それを閉じる唯一の方法は、ポップアップ内の別のトグルボタン(editNameClose)からです。

トグルボタン2(editNameClose)

  • これはポップアップの内側です
  • IsCheckedの場合、ポップアップを閉じ、editNameOpenを閉じます

これが、ねじれを解決するために使用しているxamlです。これまでの問題/質問:

  1. MultiBindingが間違っており、「MultiValueConverterを指定する必要があるため、MultiBindingを設定できません」というランタイムエラーがスローされます。この場合、MultiValueConverterは何を変換しますか?
  2. 2番目がチェックされているときに1番目のトグルボタンを閉じるにはどうすればよいですか?

乾杯、
ベリール

<ToggleButton x:Name="editNameOpen" Style="{StaticResource EditToggleButtonStyle}" Grid.Column="1" Grid.Row="0"/>

<Popup x:Name="popupNameEditingControl"
       PlacementTarget="{Binding ElementName=editeditNameOpenName}"
       PopupAnimation="Slide"
       StaysOpen="False"    ** shoulf this be true?
       MinWidth="50">

    ** open and stay open while until editNameClose is checked
    <Popup.IsOpen>
        <MultiBinding >
            <Binding Mode="OneWay" ElementName="editNameOpen" Path="IsChecked"/>
            <Binding Mode="OneWay" ElementName="editNameClose" Path="IsChecked" Converter="{StaticResource invertBoolConv}"/>
        </MultiBinding>
    </Popup.IsOpen>

    ** how do we reset editNameOpen to be NOT IsChecked when editNameClose is checked?
    ** how do we reset editNameClose to be NOT IsChecked and then reset editNameClose to also be not checked when this opens again?
    <StackPanel Orientation="Horizontal" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
        <Label Content="Hello Wolrd!"/>
        <ToggleButton x:Name="editNameClose" Content="X"/>
    </StackPanel>
</Popup>
4

1 に答える 1

2

個人的にはPopup.IsOpen、両方ToggleButtonsを1つのブールプロパティにバインドします。DataContext

したがって、最初のToggleButtonチェックが行われると、ブール値がに設定されますtrue。これにより、次のようにPopup.IsOpen評価されtruePopup

2番目ToggleButtonはおそらくConverterブールプロパティを逆にするためにaを使用する必要があるため、がチェックされていない場合はチェックされていないものとして表示され、IsOpen = trueチェックするとIsOpen = false、が自動的に閉じPopupられ、最初のプロパティがオフになります。ToggleButton

発生するエラーに関しては、1つのプロパティを2つの別々の値にバインドできないため、はタイプのをMultiBinding期待します。これらの値を使用できる単一の値に変換するには、コンバーターが必要です。ConverterIMultiValueConverter

でプロパティを使用する代わりに、本当にこの方法で実行したい場合は、のプロパティとすべてのプロパティを一緒にDataContextバインドしてみてください。IsOpenPopupIsCheckedToggleButtons

<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>
于 2012-06-18T12:47:17.030 に答える