0

在我的一个 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:可绑定不是 AssociatedType 的实例”异常。

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

4

1 回答 1

0

我在使用 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>

另请参见视觉状态管理器

于 2020-07-12T06:33:25.353 回答