我注意到一些奇怪的(但是逻辑的)行为,我有一个滑块,我已经覆盖了我想要覆盖的Thumb控件模板。这不是完整的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
将停在矩形的顶部,这意味着白线与轨道的正确对齐刻度值。
如果您从Rectangle PART_Grip
中删除Grid
并将其一直向上滑动,则白线将与最后一个勾号对齐,如下所示:
<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
中,以允许矩形超出轨道的末端,但白线将与刻度线对齐,仍然是中心?我尝试将Rectangle
改为Adorner
,但这样做有效,但似乎无法在DragDelta
上正确触发Thumb
,因此您无法将拇指向上拖动。也许有一种方法可以覆盖刻度线功能并偏移Rectangle
高度,而无需走Adorner
路线?
我想看到的内容:
答案 0 :(得分:0)
我发现了两种不同的方法。
直线负边距偏移量是Grip
高度的1/2,在这种情况下是50。
<Grid Margin="0,-25,0,-25">
这很有效。
稍微复杂一点的方法:嵌套画布,并直接对Grip
进行限制。
<Grid>
<Border/>
<Canvas>
<Rectangle x:Name="PART_Grip" Margin="0, -25, 0, 0"/>
</Canvas>
</Grid>
如果你想要滚动的话,画布允许你做一些像抓握鼠标一样容易的东西。 当然,如果方向是水平的,这也是有效的,它只是宽度而不是高度和顶部而不是左边距。