我正在尝试在 Xamarin.forms 中实现垂直滑块。我知道我需要分别在 ios 和 android 中创建渲染类。对于 ios,我的渲染器似乎工作正常。对于 Android,我正在点击链接https://forums.xamarin.com/discussion/69933/vertical-slider。然而,上面链接中提供的解决方案给我留下了一个没有拇指的滑块。有没有办法在 Xamarin.forms 中实现 Android 的垂直滑块?
我也遇到了同样的问题,并花了一些时间进行搜索。与其他评论者一样,我的解决方案是旋转滑块。事实证明,在 Forms 中这是一件非常挑剔的事情。旋转围绕中心点进行,并在任何定位之后应用,这就是为什么事情往往会偏离目标(或离开屏幕......)。我最终使用relativelayout来应用正确的大小和位置,并将其包装在contentview中,以使其美观且易于使用。
像这样使用:
...
xmlns:components="clr-namespace:YourNamespace.Components"
...
<components:VerticalContentView>
<Slider />
</components:VerticalContentView>
VerticalContentView 可以像任何其他 ContentView 一样使用。添加到其中的任何视图都将旋转 -90 度。可以使用 ContentRotation 属性自定义旋转。
请注意,任何视图都可以旋转,而不仅仅是滑块。
这就是班级。
[ContentProperty("VerticalContent")]
public class VerticalContentView : ContentView
{
public View VerticalContent
{
get => (View)GetValue(ContentProperty);
set => SetValue(ContentProperty, Verticalize(value));
}
public double ContentRotation { get; set; } = -90;
private View Verticalize(View toBeRotated)
{
if (toBeRotated == null)
return null;
toBeRotated.Rotation = ContentRotation;
var result = new RelativeLayout();
result.Children.Add(toBeRotated,
xConstraint: Constraint.RelativeToParent((parent) =>
{
return parent.X - ((parent.Height - parent.Width) / 2);
}),
yConstraint: Constraint.RelativeToParent((parent) =>
{
return (parent.Height / 2) - (parent.Width / 2);
}),
widthConstraint: Constraint.RelativeToParent((parent) =>
{
return parent.Height;
}),
heightConstraint: Constraint.RelativeToParent((parent) =>
{
return parent.Width;
}));
return result;
}
}
它是用 C# 编写的,因为我发现无法根据 XAML 中的父维度进行算术运算。
我对 Xamarin(以及一般的 XAML)还很陌生,因此这样做可能会产生我不知道的负面影响。欢迎任何批评。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)