【问题标题】:Set DatePicker text color according to IsEnabled property根据 IsEnabled 属性设置 DatePicker 文本颜色
【发布时间】:2019-02-12 22:56:49
【问题描述】:

在我的一个 Xamarin.Forms 应用程序中,我想根据 IsEnabled 属性更改 DatePicker 的文本颜色。

我尝试了两种已知方法:

1) 使用样式

在 App.xaml 中:

<Style x:Key="DatePickerStyle" TargetType="DatePicker">
    <Style.Triggers>
        <Trigger TargetType="DatePicker" Property="IsEnabled" Value="True">
            <Setter Property="TextColor" Value="Blue" />
        </Trigger>
        <Trigger TargetType="DatePicker" Property="IsEnabled" Value="False">
            <Setter Property="TextColor" Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>

在 View.xaml 中:

<DatePicker IsEnabled="{Binding IsEnabled}" Style="{StaticResource DatePickerStyle}" ... />

2) 在 XAML 中添加触发器

<ViewCell>
    <DatePicker IsEnabled="{Binding IsEnabled}" ...>
        <DatePicker.Triggers>
            <Trigger TargetType="DatePicker" Property="IsEnabled" Value="True">
                <Setter Property="TextColor" Value="Blue" />
            </Trigger>
            <Trigger TargetType="DatePicker" Property="IsEnabled" Value="False">
                <Setter Property="TextColor" Value="Red" />
            </Trigger>
        </DatePicker.Triggers>
    </DatePicker>
</ViewCell>

这两种方式都会导致“System.InvalidOperationException: bindable not an instance of AssociatedType”异常。

是否可以使用包含 IsEnabled 属性的触发器的应用样式更改选择器的文本颜色?行为会是更好的方法吗?

【问题讨论】:

  • 我建议你试试Converter
  • @FabriBertani 做到了,它只适用于状态变化,例如IsEnabled 从 false 变为 true。

标签: xamarin.forms xamarin.forms-styles


【解决方案1】:

我在使用 DatePicker 时遇到了类似的问题,但在 Xamarin 论坛或 msdn 上没有找到任何解释。我终于使用了以下解决方法,它可以工作

<Style TargetType="DatePicker">
            <Setter Property="VisualStateManager.VisualStateGroups">
                <VisualStateGroupList x:Name="CommonStates">
                    <VisualStateGroup>
                        <VisualState x:Name="Normal" />
                        <VisualState x:Name="Disabled">
                            <VisualState.Setters>
                                <Setter Property="TextColor" Value="LightGray" />
                            </VisualState.Setters>
                        </VisualState>
                    </VisualStateGroup>
                </VisualStateGroupList>
            </Setter>
        </Style>

另见Visual State Manager

【讨论】:

    猜你喜欢
    • 2011-06-24
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    相关资源
    最近更新 更多