2016-05-16 5 views
-2

トリガーのvalueプロパティを要素のプロパティに基づいて設定することはできますか?例えばトリガでは、別のプロパティの値をテストできますか?

は、ScrollBarを持っているControlTemplateで、私はそのMinimumMaximumの特性が等しい場合CollapsedにそのVisibilityプロパティを設定しようとしています。

TriggerDependencyObjectではありませんので、あなたがTriggerValueとしてBindingを設定することはできませんので、しかし、次のように動作しません。

<Trigger Property="Minimum" 
    SourceName="PART_ScrollBar" 
    Value="{Binding Maximum, SourceName=PART_ScrollBar}"> 

    <Setter Property="Visibility" 
     TargetName="PART_ScrollBar" 
     Value="Collapsed" />         

</Trigger> 

これは純粋にトリガーで行うことができますか、それともコードビハインドで行う必要がありますか?このシナリオでは

+0

でこの

public class MinMaxVisibilityBehavior : Behavior<ScrollBar> { public override void OnAttached() { DependencyPropertyDescriptor .FromProperty(ScrollBar.MaximumProperty, typeof(ScrollBar)) .AddValueChanged(AssociatedObject, CheckMinMax); DependencyPropertyDescriptor .FromProperty(ScrollBar.MinimumProperty, typeof(ScrollBar)) .AddValueChanged(AssociatedObject, CheckMinMax); } private void CheckMinMax(object sender, EventArgs e) { AssociatedObject.Visibility = AssociatedObject.Minimum == AssociatedObject.Maximum ? Visibility.Hidden : Visibility.Visible; } } 

、その後、同じように 'Maximum'と' Minimum'値がされているすべての時間をカスタム動作

の作成をお勧めします同様に、 'Visibility'を' Collapsed'に設定する必要がありますか? – StepUp

+0

はい。この問題は、トリガの値テスト部分に最大(または最小)を設定しています。私はそれが可能だとは思わない。図示されているように、バインディングを使用することはできません。他の方法はわかりません。私が考えることができるのは、簡単なカスタムVisibilityコンバーターだけですが、コードなしでテンプレートで実行できるかどうかを確認しようとしています。 – MarqueIV

+1

'minimum'と' maximum'が等しいときはfalseのブール値のViewModelプロパティ( 'ScrollVisible'?)を持っていますか?そうでなければtrueです(' minimum'と 'maximum'のどちらかで' ScrollVisible'でPropertyChangedを呼び出す必要があります。 'が変更された場合)、またはMultiValueConverterを使用します。 –

答えて

1

、IdはあなたのXAML

<ScrollBar> 
........ 
    <i:Interaction.Behaviors> 
     <local:MinMaxVisibilityBehavior /> 
    </i:Interaction.Behaviors> 
</ScrollBar> 
関連する問題