WPF范围滑块未绑定

WPF范围滑块未绑定,wpf,binding,rangeslider,Wpf,Binding,Rangeslider,我似乎对范围滑块(或者更简单地说,一个有两个拇指的滑块)的任何实现都有同样的问题 <Separator></Separator> <controls:RangeSlider x:Name="Slider" Minimum="10" Maximum="20"

我似乎对
范围滑块
(或者更简单地说,一个有两个拇指的滑块)的任何实现都有同样的问题

        <Separator></Separator>

        <controls:RangeSlider x:Name="Slider" 
                              Minimum="10"
                              Maximum="20"
                              LowerValue="{Binding Min, UpdateSourceTrigger=PropertyChanged}"
                              UpperValue="{Binding Max, UpdateSourceTrigger=PropertyChanged}"
                              />
        <TextBlock Text="{Binding LowerValue, ElementName=Slider}"/>
        <TextBlock Text="{Binding UpperValue, ElementName=Slider}"/>

        <Separator></Separator>

        <Slider x:Name="MaxSlider" Minimum="10" Maximum="20" Value="{Binding Max}"/>
        <TextBlock Text="{Binding Value, ElementName=MaxSlider}"/>

        <Separator></Separator>

        <TextBlock Text="{Binding Min}"/>
        <TextBlock Text="{Binding Max}"/>
    </StackPanel>
</Window>
我想将两个拇指绑定到datacontext,并使该绑定为双向绑定。 不幸的是,我似乎只能绑定来设置滑块的位置。如果我用鼠标移动它们,它们就会失去约束力

        <Separator></Separator>

        <controls:RangeSlider x:Name="Slider" 
                              Minimum="10"
                              Maximum="20"
                              LowerValue="{Binding Min, UpdateSourceTrigger=PropertyChanged}"
                              UpperValue="{Binding Max, UpdateSourceTrigger=PropertyChanged}"
                              />
        <TextBlock Text="{Binding LowerValue, ElementName=Slider}"/>
        <TextBlock Text="{Binding UpperValue, ElementName=Slider}"/>

        <Separator></Separator>

        <Slider x:Name="MaxSlider" Minimum="10" Maximum="20" Value="{Binding Max}"/>
        <TextBlock Text="{Binding Value, ElementName=MaxSlider}"/>

        <Separator></Separator>

        <TextBlock Text="{Binding Min}"/>
        <TextBlock Text="{Binding Max}"/>
    </StackPanel>
</Window>
我使用了几个范围滑块,但为了保持简单,在这个例子中,我使用了一个。(我没有修改它,所以我现在不在这里包括它,但如果它有帮助的话,我可以)。 我使用下面的XAML使用它,目的是让框架滑块(名为“MinSlider”和“MaxSlider”)也绑定到相同的数据源

        <Separator></Separator>

        <controls:RangeSlider x:Name="Slider" 
                              Minimum="10"
                              Maximum="20"
                              LowerValue="{Binding Min, UpdateSourceTrigger=PropertyChanged}"
                              UpperValue="{Binding Max, UpdateSourceTrigger=PropertyChanged}"
                              />
        <TextBlock Text="{Binding LowerValue, ElementName=Slider}"/>
        <TextBlock Text="{Binding UpperValue, ElementName=Slider}"/>

        <Separator></Separator>

        <Slider x:Name="MaxSlider" Minimum="10" Maximum="20" Value="{Binding Max}"/>
        <TextBlock Text="{Binding Value, ElementName=MaxSlider}"/>

        <Separator></Separator>

        <TextBlock Text="{Binding Min}"/>
        <TextBlock Text="{Binding Max}"/>
    </StackPanel>
</Window>
当我移动框架滑块时,所有绑定的项目都会跟随它们,包括范围滑块,但如果我移动范围滑块上的一个拇指,则不会更新数据源或框架滑块

        <Separator></Separator>

        <controls:RangeSlider x:Name="Slider" 
                              Minimum="10"
                              Maximum="20"
                              LowerValue="{Binding Min, UpdateSourceTrigger=PropertyChanged}"
                              UpperValue="{Binding Max, UpdateSourceTrigger=PropertyChanged}"
                              />
        <TextBlock Text="{Binding LowerValue, ElementName=Slider}"/>
        <TextBlock Text="{Binding UpperValue, ElementName=Slider}"/>

        <Separator></Separator>

        <Slider x:Name="MaxSlider" Minimum="10" Maximum="20" Value="{Binding Max}"/>
        <TextBlock Text="{Binding Value, ElementName=MaxSlider}"/>

        <Separator></Separator>

        <TextBlock Text="{Binding Min}"/>
        <TextBlock Text="{Binding Max}"/>
    </StackPanel>
</Window>
我的窗口XAML。。。

        <Separator></Separator>

        <controls:RangeSlider x:Name="Slider" 
                              Minimum="10"
                              Maximum="20"
                              LowerValue="{Binding Min, UpdateSourceTrigger=PropertyChanged}"
                              UpperValue="{Binding Max, UpdateSourceTrigger=PropertyChanged}"
                              />
        <TextBlock Text="{Binding LowerValue, ElementName=Slider}"/>
        <TextBlock Text="{Binding UpperValue, ElementName=Slider}"/>

        <Separator></Separator>

        <Slider x:Name="MaxSlider" Minimum="10" Maximum="20" Value="{Binding Max}"/>
        <TextBlock Text="{Binding Value, ElementName=MaxSlider}"/>

        <Separator></Separator>

        <TextBlock Text="{Binding Min}"/>
        <TextBlock Text="{Binding Max}"/>
    </StackPanel>
</Window>

这是因为您需要在
绑定中设置
BindingMode=TwoWay

        <Separator></Separator>

        <controls:RangeSlider x:Name="Slider" 
                              Minimum="10"
                              Maximum="20"
                              LowerValue="{Binding Min, UpdateSourceTrigger=PropertyChanged}"
                              UpperValue="{Binding Max, UpdateSourceTrigger=PropertyChanged}"
                              />
        <TextBlock Text="{Binding LowerValue, ElementName=Slider}"/>
        <TextBlock Text="{Binding UpperValue, ElementName=Slider}"/>

        <Separator></Separator>

        <Slider x:Name="MaxSlider" Minimum="10" Maximum="20" Value="{Binding Max}"/>
        <TextBlock Text="{Binding Value, ElementName=MaxSlider}"/>

        <Separator></Separator>

        <TextBlock Text="{Binding Min}"/>
        <TextBlock Text="{Binding Max}"/>
    </StackPanel>
</Window>
控件
作者可以将此设置为默认行为(WPF
滑块
执行此操作),但除非依赖项属性已注册到
FrameworkPropertyMetadata.BindsTwoWayByDefault
,否则将使用
单向
模式

        <Separator></Separator>

        <controls:RangeSlider x:Name="Slider" 
                              Minimum="10"
                              Maximum="20"
                              LowerValue="{Binding Min, UpdateSourceTrigger=PropertyChanged}"
                              UpperValue="{Binding Max, UpdateSourceTrigger=PropertyChanged}"
                              />
        <TextBlock Text="{Binding LowerValue, ElementName=Slider}"/>
        <TextBlock Text="{Binding UpperValue, ElementName=Slider}"/>

        <Separator></Separator>

        <Slider x:Name="MaxSlider" Minimum="10" Maximum="20" Value="{Binding Max}"/>
        <TextBlock Text="{Binding Value, ElementName=MaxSlider}"/>

        <Separator></Separator>

        <TextBlock Text="{Binding Min}"/>
        <TextBlock Text="{Binding Max}"/>
    </StackPanel>
</Window>

解释
BindingMode
s.

如果更改codebehind中的最小值和最大值,滑块的位置是否会更改?
        <Separator></Separator>

        <controls:RangeSlider x:Name="Slider" 
                              Minimum="10"
                              Maximum="20"
                              LowerValue="{Binding Min, UpdateSourceTrigger=PropertyChanged}"
                              UpperValue="{Binding Max, UpdateSourceTrigger=PropertyChanged}"
                              />
        <TextBlock Text="{Binding LowerValue, ElementName=Slider}"/>
        <TextBlock Text="{Binding UpperValue, ElementName=Slider}"/>

        <Separator></Separator>

        <Slider x:Name="MaxSlider" Minimum="10" Maximum="20" Value="{Binding Max}"/>
        <TextBlock Text="{Binding Value, ElementName=MaxSlider}"/>

        <Separator></Separator>

        <TextBlock Text="{Binding Min}"/>
        <TextBlock Text="{Binding Max}"/>
    </StackPanel>
</Window>