我在XAML中有两个滑块:
<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)维度。)
我考虑过使用Property Binding,但我的用例需要一个条件属性绑定,而我很困惑如何实现它。
另外,目前,我更倾向于不进入自制WPF Range Sliders(带有两个光标的滑块)的领域,尽管我同意这将是“正确”的解决方案。
答案 0 :(得分: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));
}
}
}
然后将两个Sliders绑定到两个属性Minimum
和Maximum
:
<StackPanel>
<StackPanel.DataContext>
<local:Range/>
</StackPanel.DataContext>
<Slider Value="{Binding Minimum}"/>
<Slider Value="{Binding Maximum}"/>
</StackPanel>