我要求重新导出ScrollBar
,以便只需要一个Template
,而不是单独的水平和垂直。{}设计者的断言是ScrollBar
可以在Trigger
上旋转(Orientation = Horizontal),并在按钮上交换命令。
由于单Template
被设置为带有行的Grid
,因此水平ScrollBar
在旋转时会卡在视图的中心,只显示左右按钮。这似乎是因为中心*行的高度是轨道区域的高度,因此它不会拉伸。将Trigger
绑定到父ScrollViewer
ActualWidth
之类的高度会导致通常的堆栈溢出。
有什么想法?我认为所有示例都有一个水平和垂直模板分开的原因。
答案 0 :(得分:1)
没关系。我弄清楚了:
<Trigger Property="Orientation" Value="Horizontal">
<!-- Rotate the ScrollBar from Vertical to Horizontal -->
<Setter Property="LayoutTransform" TargetName="gLayoutRoot">
<Setter.Value>
<RotateTransform Angle="90"/>
</Setter.Value>
</Setter>
<!-- Change Track Orientation back to Vertical -->
<Setter TargetName="PART_Track" Property="Orientation" Value="Vertical"/>
<Setter TargetName="PART_Track" Property="IsDirectionReversed" Value="false"/>
<!-- Change the commands to do Horizontal commands -->
<Setter Property="Command" Value="ScrollBar.LineRightCommand" TargetName="DecreaseRepeat"/>
<Setter Property="Command" Value="ScrollBar.LineLeftCommand" TargetName="IncreaseRepeat"/>
<Setter Property="Command" Value="ScrollBar.PageLeftCommand" TargetName="PageDown"/>
<Setter Property="Command" Value="ScrollBar.PageRightCommand" TargetName="PageUp"/>
</Trigger>
然后在样式中将所有内容设置为Stretch或Auto。
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="VerticalAlignment" Value="Stretch"/>
<Setter Property="Width" Value="Auto"/>
<Setter Property="Height" Value="Auto"/>
幸运的是其中一项成功。