Изменение цвета ToggleSwitch для UWP с помощью Xamarin.Forms

Я хотел бы изменить цвет переключателя для UWP в проекте Xamarin.Forms. Я думаю, что есть 2 способа сделать это: либо собственный рендерер, либо эффект. Итак, я попытался создать эффект, но похоже, что я все еще не могу изменить границы тумблера. Кто-нибудь будет достаточно любезен, чтобы помочь мне?

Ниже приведен мой код: в UWP файл FocusEffect.cs,

namespace EffectsDemo.UWP
{
    public class FocusEffect : PlatformEffect
    {
        protected override void OnAttached()
        {
            try
            {
               (Control as Windows.UI.Xaml.Controls.Control).Background = new SolidColorBrush(Colors.Black);                   
                (Control as Windows.UI.Xaml.Controls.Control).BorderBrush = new SolidColorBrush(Colors.Yellow);
                (Control as Windows.UI.Xaml.Controls.Control).Foreground = new SolidColorBrush(Colors.Green);
                 (Element as Switch).IsInNativeLayout = false;
                (Control as ToggleSwitch).BorderBrush = new SolidColorBrush(Colors.WhiteSmoke);
                (Control as ToggleSwitch).BorderThickness = new Windows.UI.Xaml.Thickness(500);

            }
            catch (Exception ex)
            {
                Debug.WriteLine("Cannot set property on attached control. Error: ", ex.Message);
            }
        }

        protected override void OnDetached()
        {
        }
    }

person Little Kid    schedule 19.01.2018    source источник


Ответы (1)


Если вы посмотрите стиль ToggleSwitch по умолчанию в документации или в файле generic.xaml вы обнаружите, что его граница определяется следующим образом:

<Rectangle x:Name="OuterBorder"
            Grid.Row="2"
            Height="20"
            Width="44"
            RadiusX="10"
            RadiusY="10"
            Stroke="{ThemeResource SystemControlForegroundBaseMediumHighBrush}"
            StrokeThickness="2" />

Как видите, кисть Stroke жестко закодирована в шаблоне по умолчанию и не зависит от значения BorderBrush, которое вы установили для элемента управления. Это означает, что единственный способ добиться этого — написать пользовательский стиль внутри проекта UWP для элемента управления, где вы будете использовать нужную кисть, а затем установить ее в пользовательском средстве визуализации. .

person Martin Zikmund    schedule 19.01.2018