我正在使用三个相互堆叠的 slider 控件创建一个“范围 slider ”。基本思想来自这里,它使用两个 slider 。
我添加了第三个 slider ,其拇指将填充另一个 slider 的拇指之间的空间。用户将能够拖动中心拇指来移动两端并保持两端之间的间距恒定。
XAML 只是三个 slider 。让它很好地分层的秘诀是使用控件模板(此处不再重复。您可以在上面的 URL 中找到它)。
<Grid VerticalAlignment="Top">
<Border BorderThickness="0,1,0,0" BorderBrush="Green" VerticalAlignment="Center" Height="1"
Margin="5,0,5,0"/>
<Slider x:Name="LowerSlider"
Minimum="{Binding ElementName=root, Path=Minimum}"
Maximum="{Binding ElementName=root, Path=Maximum}"
Value="{Binding ElementName=root, Path=LowerValue, Mode=TwoWay}"
Margin="0,0,0,0"
Template="{StaticResource simpleSlider}"
/>
<Slider x:Name="MiddleSlider"
Minimum="{Binding ElementName=root, Path=Minimum}"
Maximum="{Binding ElementName=root, Path=Maximum}"
Value="{Binding ElementName=root, Path=MiddleValue, Mode=TwoWay}"
Margin="10,0,0,0"
Template="{StaticResource simpleSlider}"
>
</Slider>
<Slider x:Name="UpperSlider"
Minimum="{Binding ElementName=root, Path=Minimum}"
Maximum="{Binding ElementName=root, Path=Maximum}"
Value="{Binding ElementName=root, Path=UpperValue, Mode=TwoWay}"
Margin="20,0,0,0"
Template="{StaticResource simpleSlider}"
/>
</Grid>
当拖动任一外部拇指时,我需要调整中心拇指的大小以填充两个末端拇指之间的空间。
在后面的代码中,我可以捕获拇指的移动,并且可以找到中间 slider 控件,但我无法弄清楚如何以编程方式到达中间 slider 的拇指以便我可以调整它的大小填充两个外侧拇指之间的空间。
private void UpperSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
Slider slider= (Slider) this.FindName("MiddleSlider");
// how to find the middleSlider thumb so I can set
// it's width to fill the space between the outer thumbs
}
最佳答案
这应该可以做到:
var track = (Track)slider.Template.FindName("PART_Track", slider);
var thumb = track.Thumb;
thumb.Width = fittingWidth;
(顺便说一句,我不会这样做,我会将 MultiBinding
应用于其他两个 slider 和一个从中计算宽度的转换器)
关于wpf - 如何找到 slider 的拇指来设置其宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5956920/