2017-07-18 76 views
-1

我注意到一些奇怪的(但逻辑)的行为与滑块我有我重写了我想重写的拇指控制模板的位置。这不是完整的XAML,但它是关键部分。红色的矩形是手柄,它的中间有一条白色的水平线。带控制模板拇指的滑块会影响值?

<Slider VerticalAlignment="Center" 
     Orientation="Vertical" 
     IsMoveToPointEnabled="True"/> 

<ControlTemplate TargetType="{x:Type Thumb}"> 
     <Grid Margin="0,1,0,1" SnapsToDevicePixels="True"> 
      <Border Name="PART_Border" 
        Background="White" 
        Height="1"/> 
      <Rectangle x:Name="PART_Grip" Fill="Red" Height="50" Width="15" ClipToBounds="True"/> 
     </Grid> 
</ControlTemplate> 

在后面的代码,如果我的模板挂钩到在滑块的风格大拇指,它给了我一个可爱的小滑块这样这是我想要的。

但是,一旦我开始四处滑动,我注意到,功能略有不同,当你有Rectangle。当你拖动时,Thumb到达轨道末端(粗略地在这里显示为绿色),但Thumb将停在矩形的顶部,这意味着白线与轨道的刻度值不正确对齐。

如果您删除的GridRectangle PART_Grip和滑动一路上涨这样,白线将与最后一跳,像这样排列的:

<ControlTemplate TargetType="{x:Type Thumb}"> 
      <Grid Margin="0,1,0,1" SnapsToDevicePixels="True"> 
       <Border Name="PART_Border" 
         Background="White" 
         Height="1"/> 
      </Grid> 
</ControlTemplate> 

如何将Rectangle定位在Grid中,使得矩形可以超出轨道的末端,但whi te线将与蜱对齐并仍居中?我尝试Rectangle作为Adorner而不是,它的工作,但它似乎不可能正确触发 10,所以你不能拖动大拇指。也许有一种方法可以覆盖勾号功能,并且可以通过Rectangle高度进行偏移,而无需执行Adorner路线?

我想看到的:

enter image description here

回答

0

我发现了两个不同的方法来做到这一点。

直负边界偏移量为1/2 Grip的高度,在这种情况下是50。

<Grid Margin="0,-25,0,-25"> 

这种运作良好。

一个稍微复杂的方法:直接嵌套一个画布,并保留Grip

<Grid> 
    <Border/> 
    <Canvas> 
     <Rectangle x:Name="PART_Grip" Margin="0, -25, 0, 0"/> 
    </Canvas> 
</Grid> 

画布可以让你做的东西一样有抓地力跟随鼠标移动很轻松了,如果这就是你想怎么滚。 当然,这也适用于方向是水平的,它只是宽度而不是高度,顶部而不是左边距。