2013-04-09 10 views
0

我在XAML奠定了兩個滑塊:條件等兩項WPF滑塊的值之間的結合

<Border Background="Black"> 
    <StackPanel x:Name="LayoutRoot" Background="#FFB13232" HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Horizontal"> 
     <Image Width="800" Height="600" /> 
     <Slider x:Name="bigvalue" Orientation="Vertical" Maximum="1" LargeChange="0.1" SmallChange="0.01" Value="1" /> 
     <Slider x:Name="smallvalue" Orientation="Vertical" Maximum="1" LargeChange="0.1" SmallChange="0.01"/> 
    </StackPanel> 
</Border> 

...我想實現以下行爲:如果bigvalue.Value,滑動過程中,達到smallvalue.Value並且我一直向下滑動,smallvalue.Value應該更新,類似於滑塊遊標之間的「碰撞檢測」。

(背景:這些將控制頂部位置,並且將在圖像中被繪製的物體的底部位置,並且該對象不應該有一個負(TOP_POSITION - BOTTOM_POSITION)尺寸)

我想過使用屬性綁定,但我的用例調用條件屬性綁定,我很困惑如何實現這一點。此外,目前,我更喜歡不進入國產WPF Range Sliders(帶兩個遊標的滑塊)的領域,儘管我同意這將是「正確的」解決方案。

回答

2

你可以創建一個實現期望的行爲Range視圖模型類:

public class Range : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    private double minimum; 
    public double Minimum 
    { 
     get { return minimum; } 
     set 
     { 
      minimum = value; 
      OnPropertyChanged("Minimum"); 

      if (Maximum < Minimum) 
      { 
       Maximum = Minimum; 
      } 
     } 
    } 

    private double maximum; 
    public double Maximum 
    { 
     get { return maximum; } 
     set 
     { 
      maximum = value; 
      OnPropertyChanged("Maximum"); 

      if (Minimum > Maximum) 
      { 
       Minimum = Maximum; 
      } 
     } 
    } 

    private void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

,然後兩個滑塊綁定到兩個屬性MinimumMaximum

<StackPanel> 
    <StackPanel.DataContext> 
     <local:Range/> 
    </StackPanel.DataContext> 
    <Slider Value="{Binding Minimum}"/> 
    <Slider Value="{Binding Maximum}"/> 
</StackPanel> 
+0

這很有趣。我會稍微消化一下,但我想我會更進一步,將滑塊直接綁定到對象的相應屬性,並將邏輯放在對象本身中。 – heltonbiker 2013-04-09 19:22:28