別の要素の可視性をバインドオフし、反転する質問する

別の要素の可視性をバインドオフし、反転する質問する

コントロール B が非表示の場合はコントロール A を表示し、その逆も行いたいです。現在、次のコンバーターがあります:

public class InvertVisibilityConverter : IValueConverter {

    public Object Convert(Object value, Type targetType, Object parameter, CultureInfo culture) {
        if (targetType == typeof(Visibility)) {
            Visibility vis = (Visibility)value;
            return vis == Visibility.Collapsed ? Visibility.Visible : Visibility.Collapsed;
        }
        throw new InvalidOperationException("Converter can only convert to value of type Visibility.");
    }

    public Object ConvertBack(Object value, Type targetType, Object parameter, CultureInfo culture) {
        throw new Exception("Invalid call - one way only");
    }
}

そしてこの XAML:

<Button Visibility="{Binding ElementName=btn1, Path=Visibility, Converter={StaticResource InvertVisibilityConverter}}">Btn2</Button>

うまくいきました。WPF / Silverlight でこれを実現するより直接的な方法があるかどうか知りたいだけです。コンバーターがあっても構いませんが、私が知らないより良い方法がないか確認したいだけです。

ベストアンサー1

この場合はトリガーで実行できます。2つのボタンの例

<Button Name="button1">
    <Button.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=button2, Path=Visibility}" Value="Visible">
                    <Setter Property="Button.Visibility" Value="Hidden"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>
<Button Name="button2"/>

おすすめ記事