Xamarin UWP Установить цвет заполнителя PasswordBox

У меня есть общий проект Xamarin.Forms со страницей входа. Для UWP я хотел бы использовать функцию раскрытия пароля, поэтому мне нужен элемент управления PasswordBox. Я хотел бы установить цвет текста заполнителя для элемента управления PasswordBox в UWP. Проблема в том, что в Xamarin нет PasswordBoxRenderer, а элемент управления PasswordBox не имеет свойства для редактирования цвета переднего плана заполнителя.

Мне не удалось найти обновленное/Xamarin-решение. Любая помощь или решение приветствуется.


person DanielBkr    schedule 21.08.2017    source источник


Ответы (1)


Лучший способ переопределить кисть по умолчанию в ресурсе PasswordBox, например:

<PasswordBox PlaceholderText="PASSWORD">
            <PasswordBox.Resources>
                <SolidColorBrush x:Key="TextControlPlaceholderForegroundFocused" Color="Red"/>
                <SolidColorBrush x:Key="TextControlPlaceholderForeground" Color="Red"/>
            </PasswordBox.Resources>
        </PasswordBox>

Вы также можете переопределить: TextControlPlaceholderForegroundPointerOver, TextControlPlaceholderForegroundDisabled

Добавьте новый UserControl в свой проект, затем измените его на:

<PasswordBox
    x:Class="App3.CustomPasswordBox"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" Width="200" Height="50" PlaceholderText="PlaceHolder">
    <PasswordBox.Resources>
        <SolidColorBrush x:Key="TextControlPlaceholderForegroundFocused" Color="Red"/>
        <SolidColorBrush x:Key="TextControlPlaceholderForeground" Color="Red"/>
    </PasswordBox.Resources>
</PasswordBox>

Удалите CustomPasswordBox.xaml.cs.

Создайте новый рендерер:

public class PasswordRenderer : ViewRenderer<Entry, CustomPasswordBox>
    {
        
    }
person Denis Kosov    schedule 21.08.2017
comment
Хорошо, теперь, где именно я могу разместить ваш код xaml и как я могу использовать его или ссылаться на него в моем общем проекте Xaml (или в коде)? - person DanielBkr; 21.08.2017
comment
В проекте UWP создайте новый элемент управления с помощью XAML, измените его тип на PasswordBox в xaml и коде позади. И добавьте код в ответ - person Denis Kosov; 21.08.2017
comment
Хорошо, я не уверен, что понимаю, как вы хотите, чтобы я это сделал. Нужно ли создавать новый UserControl в проекте UWP с полем пароля, определенным в xaml, а затем ссылаться на него из моего общего проекта? Пробовал так, не получилось. - person DanielBkr; 22.08.2017
comment
Обновить мой ответ - person Denis Kosov; 22.08.2017
comment
Пытаясь сделать это, я получаю сообщение об ошибке: тип custompasswordbox нельзя использовать в качестве параметра типа TNativeElement..... Нет неявного преобразования ссылок из custompasswordbox в windows.ui.xaml.frameworkelement. Новый рендерер кажется правильным. - person DanielBkr; 22.08.2017
comment
Создавая приведенный выше код, я получаю: не может быть получен из закрытого класса PasswordBox. Поэтому я предполагаю, что мне нужно обернуть его внутри сетки или чего-то еще. Единственная проблема заключается в том, как получить доступ к свойству passwordbox.password, если оно находится внутри родительского элемента. - person DanielBkr; 22.08.2017
comment
В моем ответе у вас нет родителя для CustomPasswordBox, это представление PasswordBox в XAML. Xaml.cs нужно удалить. Я предоставлю пример на github через несколько минут - person Denis Kosov; 22.08.2017