禁用时如何控制条目的占位符文本颜色

时间:2017-10-05 21:26:40

标签: xamarin xamarin.forms

我有2个条目。两者都可以用作输入,另一个可以用作计算的输出。当输入一个值时,另一个被禁用,因此用户无法输入值。我的问题是,当禁用该条目时,占位符文本和文本都变为深灰色。尽管已为禁用状态设置了文本和占位符颜色。我已经尝试了各种方法来设置颜色没有运气。它总是被覆盖。在禁用条目时更改背景颜色没有问题,但文本不会更改。

我尝试使用自定义Entry控件并在更改IsEnabled属性时设置属性。此外,我尝试应用包含触发器的样式,我尝试在XAML中设置触发器,没有任何工作。

有什么建议吗?

<Entry
     HorizontalTextAlignment="Center"
     Keyboard="Numeric"
     Placeholder="0"
     HorizontalOptions="FillAndExpand"
     IsEnabled="{Binding MinuteEnabled}"
     Text="{Binding MinuteString, Mode=TwoWay}">


     <Entry.Triggers>
         <Trigger TargetType="Entry"
             Property="IsEnabled" Value="False">
        <Setter Property="BackgroundColor" Value="Yellow" />
        <Setter Property="PlaceholderColor" Value="Green" />
        <Setter Property="TextColor" Value="Green" />

        </Trigger>
    </Entry.Triggers>

1 个答案:

答案 0 :(得分:0)

实际上这很难归档,但是一个可行的解决方案是将一些隐藏的标签绑定到您的输出。

这里有一些示例代码,您可以使用视图模型进行存档。

XAML

<Label x:Name="Output1"
       TextColor="Green"
       BackgroundColor="Yellow"
       HorizontalOptions="FillAndExpand"
       FontSize="Medium"
       HeightRequest="35"
       IsVisible="False" />
<Entry x:Name="entry1"
       Keyboard="Numeric"
       Placeholder="0"
       HorizontalOptions="FillAndExpand"/>
<Entry x:Name="entry2"
       Keyboard="Numeric"
       Placeholder="0"
       HorizontalOptions="FillAndExpand"/>
<Label x:Name="Output2"
       TextColor="Green"
       BackgroundColor="Yellow"
       HorizontalOptions="FillAndExpand"
       FontSize="Medium"
       HeightRequest="35"
       IsVisible="False" />

背后的代码

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();

        entry1.Completed += (s, e) =>
        {
            // All your logic here or do it on view model
            entry2.IsVisible = false;
            Output2.IsVisible = true;
            Output2.Text = entry1.Text;
        };

        entry2.Completed += (s, e) =>
        {
            // All your logic here or do it on view model
            entry1.IsVisible = false;
            Output1.IsVisible = true;
            Output1.Text = entry2.Text;
        };
    }
}

您可以添加一个清除按钮来恢复条目和标签。