11

私は簡単な演習を開発していて、XAMLのみを使用して別の要素の反対にバインドする方法があるかどうかを知りたいです。例えば。フォームに2つのボタンがあります。おそらく、タイマーの開始と停止です。両方を同時に有効にしたくありません。プログラムが起動したら、停止ボタンを無効にする必要があります。スタートボタンをクリックすると、それを無効にし、停止ボタンを有効にする必要があります。次に、ユーザーが終了するまでその逆を行います。

私はこれを正確に制御するためのより良いコントロールがあることを知っています、そして私はそれがコードで行うのが簡単であることを知っています。XAMLに次のようなNOT演算子があるかどうかを知りたかっただけです。

<Button Content="_Start" Name="btnStart"/>
<Button Content="_Stop" Name="btnStop"
        IsEnabled="{Binding ElementName=btnStart,
                    Path=Not(IsEnabled)}"/>

または次のようなもの:

                    Path != IsEnabled}"/>

または次のようなものです:

                    Path=IsEnabled.Not()}"/>

スタートボタンに直接バインドできることはわかっていますが、一方が有効になっている場合はもう一方も、無効になっている場合も同様です。私がどこから来ているのか見てください。

最初に開始ボタンの状態をチェックし、停止ボタンの状態を反対にする、ある種のXAML検証手法を喜んで受け入れます。または、コードビハインドを必要としない他の同様のハックまたは回避策。

これについて助けてくれてありがとう。

編集:これの要点はコード開発プラットフォームではないことを忘れないでください。背後に1行のコードを記述する必要がある場合は、onclickイベントハンドラーと単純な?:演算子を使用することもできます。したがって、XAMLで直接機能するものだけが必要です。

4

2 に答える 2

16

Not箱から出してすぐに操作することはできません。ただし、カスタムコンバータを使用してこれを自分で実現するのは非常に簡単です。

public class NotConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return !(bool) value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return !(bool)value;
    }
}

次に、バインディングでコンバーターとして指定できます。

<Button Content="_Stop" Name="btnStop"
    IsEnabled="{Binding ElementName=btnStart, Converter={StaticResource NotConverter} Path=IsEnabled}"/>

そして最後に、ウィンドウ/ページにNotConverterというリソースを作成します。

<Window.Resources>
    <ns:NotConverter x:Key="NotConverter" />
</Window.Resources>

詳細については、 MSDNIValueConverterから入手できます。

次に、この値コンバーターを好きな場所で使用できます。ウィンドウリソースからそれを引き出してアプリケーションレベルのリソースにすることができるので、すべてのウィンドウで指定する必要はありません。

于 2011-09-24T15:12:55.420 に答える
3

私がそれを正しく知っている場合、!Propertyにバインドすることはできませんが、IValueConverterを記述して、バインドに使用することはできます。ここでは、否定ブール値を返すIValueConverterを設定する方法について詳しく説明します。

プロパティを否定するIValueConverter

于 2011-09-24T15:10:42.753 に答える