2016-05-16 20 views
-2

是否可以將觸發器的value屬性設置爲元素的屬性?在觸發器中,您可以測試另一個屬性的值嗎?

例如,在一個ControlTemplate具有ScrollBar,我想如果MinimumMaximum屬性等於其Visibility屬性設置爲Collapsed

但是,下列情況不工作,因爲你不能設置一個BindingTriggerValue因爲Trigger不是DependencyObject

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

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

</Trigger> 

所以可以這樣純粹用觸發器做,或做我必須做這在代碼隱藏?

+0

當'Maximum'和'Minimum'值爲任何時間同樣,你應該把'可見性'設置爲'摺疊'? – StepUp

+0

是的。問題是將最大值(或最小值)放入觸發器的值測試部分。我不認爲這是可能的。如圖所示,你不能使用綁定,我不知道任何其他方式。唯一我能想到的是一個自定義可見性轉換器,這很容易,但我試圖看看如果我可以在沒有代碼的模板中做到這一點。 – MarqueIV

+1

要麼有一個布爾型ViewModel屬性('ScrollVisible'?),當'minimum'和'maximum'等於true且否則爲true時(儘管這需要記住在'minimum'或'maximum'時調用'ScrollVisible'上的PropertyChanged '改變了),或者使用MultiValueConverter。 –

回答

1

在這種情況下,身份證建議創建一個自定義行爲

像這樣

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; 
    } 
} 

,然後在XAML

<ScrollBar> 
........ 
    <i:Interaction.Behaviors> 
     <local:MinMaxVisibilityBehavior /> 
    </i:Interaction.Behaviors> 
</ScrollBar> 
相關問題