0

Selectorを使用して子コントロールを切り替えるSelectorSwitchedControl というコントロールがあります。単純化されたタブ コントロールの線に沿って考えますが、タブの代わりにComboBoxorを使用します。ListBox

リストに複数の項目がある場合、セレクターを表示する必要があることを示すトリガーを構築しようとしています。

私が考えることができる唯一のことは、1 つではなく 2 つのトリガーを使用することです。コントロールのテンプレートでデフォルトでセレクターを表示できるようにしてから、セレクターを非表示にする 2 つの個別のトリガーを作成します。最初の条件テストではゼロ アイテムをテストし、2 つ目の条件テストでは 1 アイテムをテストします。これらのいずれかが一致すると、セレクターは非表示になります。2 つ以上の項目がある場合は、表示されたままになります。

それは機能しますが、マルチトリガーであっても、単一のトリガーを使用してこの動作を作成する方法があるかどうか疑問に思っています。ただし、MultiTrigger は「And」テストですが、「Or」テストが必要です。通常、ロジックを反転して MultiTrigger を「Or」のように動作するように変更できますが、個々のテストには「Not」条件などがないため、プロパティ自体がブール値である必要があります (つまり、「プロパティ」とは言えません)。 0 に等しくなく、1 にも等しくない')。

記録として、これに対処する方法としてコンバーターやコード ビハインドを簡単に使用できることはわかっていますが、これを行うための純粋な XAML の方法があるかどうか疑問に思っているので、この動作は他のコードなしでスタイル設定できます。依存関係。

4

1 に答える 1

1

はい、入力としてリスト カウントを受け取り、リスト カウントが 0 または 1 より大きいことに基づいて true または false を返す IValueConverter を作成しますLessThanOrEqualConverter

その後、0 と 1 の両方で機能する単一のトリガーを使用できます。

また

LengthToBoolConverterコンバーターを用意して、Visibility をそのコンバーターにバインドするだけです。Visibility.Collapsed長さが 1 以下の場合はコンバーターが返され、それ以外の場合は返されVisibility.Visibleます。

これにより、単一のトリガーについて心配する必要がなくなります。コンバーターとバインディングがそれを行います。

于 2013-11-07T19:34:19.547 に答える