xamarin - Xamarin.forms 中的垂直 slider ?

标签 xamarin xamarin.android slider xamarin.forms

我正在尝试在 Xamarin.forms 中实现垂直 slider 。我知道我需要分别在 ios 和 android 中创建渲染类。对于 ios,我的渲染器似乎工作正常。对于 android,我正在关注链接 https://forums.xamarin.com/discussion/69933/vertical-slider .但是,上面链接中提供的解决方案给我留下了一个没有拇指的 slider 。有没有办法在 Xamarin.forms 中为 android 实现垂直 slider ?

最佳答案

我也遇到了同样的问题,找了半天。与其他评论者一样,我的解决方案是旋转 slider 。事实证明,这是在 Forms 中做的一件非常挑剔的事情。旋转围绕中心点并在任何定位之后应用,这就是为什么事情往往会偏离目标(或屏幕外......)。我最终使用 RelativeLayout 来应用正确的大小和位置,并将其包装在 ContentView 中以使其美观且易于使用。

像这样使用:

... 
xmlns:components="clr-namespace:YourNamespace.Components" 
...
<components:VerticalContentView>
    <Slider />
</components:VerticalContentView>

VerticalContentView 可以像任何其他 ContentView 一样使用。添加到其中的任何 View 都将旋转 -90 度。可以使用 ContentRotation 属性自定义旋转。

请注意,任何 View 都可以旋转,而不仅仅是 slider 。

这是类。

[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)还很陌生,所以这样做可能会产生我不知道的负面影响。欢迎任何批评。

关于xamarin - Xamarin.forms 中的垂直 slider ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42972823/

相关文章:

ios - 寻找新 Xamarin IOS 项目的侧边菜单

android-intent - Xamarin Android 应用程序崩溃并显示 "Intent must include an explicit package name to build an android-app"

android - 计算显示 map 的面积

c# - 如何删除xamarin形式的操作栏?

c# - 使用 Xamarin.iOS 获取 iOS 库文件夹的正确方法是什么?

xamarin.android - Snackbar问题(仅在 Debug模式下)

svg - JavaFX 如何沿着给定的 SVG 路径拖动对象 - 就像一个 slider

jquery-ui - jquery UI slider 最小/最大值

css - bxSlider WP Pro 多主题寻呼机

c# - 在 Xamarin 应用程序中将项目添加到 Android 上的 ListView