wpf - 如何找到 slider 的拇指来设置其宽度

标签 wpf slider rangeslider

我正在使用三个相互堆叠的 slider 控件创建一个“范围 slider ”。基本思想来自这里,它使用两个 slider 。

http://www.thejoyofcode.com/Creating_a_Range_Slider_in_WPF_and_other_cool_tips_and_tricks_for_UserControls_.aspx

我添加了第三个 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/

相关文章:

WPF 数据网格左列

javascript - 连接范围 slider Jquery

jquery-mobile - 如何使用 knockout.js 正确绑定(bind)和初始化 jQuery Mobile 范围 slider ?

javascript - 如何在没有插件和 Jquery UI 的情况下创建范围 slider ?

带有 ItemsSource 的 WPF ContextMenu - 如何在每个项目中绑定(bind)到 Command?

wpf - 在 WPF MVVM 中打开对话框

javascript - jQuery UI slider 不起作用(提供了 fiddle )

user-interface - 如何在 Octave 中编写 slider 以获得交互式绘图?

javascript - 单击时不会触发叠加层

c# - 如何在不使用控件的情况下在 WPF 中打印内容?