Xamarin:视觉状态管理器和自定义属性

问题描述 投票:0回答:1

我正在尝试使用Visual State Manager在自定义控件上设置自定义属性,但到目前为止我还没有运气。我的自定义控件只是带有附加可绑定属性的标签。

public class SelectableLabel : Label
{
    public static readonly BindableProperty IsSelectedProperty = BindableProperty.Create("IsSelected", typeof(bool), typeof(SelectableLabel), false);

    public bool IsSelected
    {
        get { return (bool)GetValue(IsSelectedProperty); }
        set
        {
            Console.WriteLine($"MDO: {Text}.IsSelected_set={value}");
            SetValue(IsSelectedProperty, value);
        }
    }

当控件进入IsSelected视觉状态时,我在CollectionView中使用此控件来切换Selected属性。

    <CollectionView
        x:Name="cv"
        ItemsSource="{Binding Names}"
        SelectionMode="Multiple"
        SelectedItems="{Binding SelectedNames, Mode=TwoWay}"
        VerticalOptions="Fill">
        <CollectionView.ItemTemplate>
            <DataTemplate>
                <local:SelectableLabel
                    x:Name="lblName"
                    Text="{Binding First}">
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup
                            x:Name="CommonStates">
                            <VisualState
                                x:Name="Normal">
                                <VisualState.Setters>
                                    <Setter
                                        Property="IsSelected"
                                        Value="False" />
                                </VisualState.Setters>
                            </VisualState>
                            <VisualState
                                x:Name="Selected">
                                <VisualState.Setters>
                                    <Setter
                                        Property="IsSelected"
                                        Value="True" />
                                </VisualState.Setters>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                </local:SelectableLabel>
            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>

[当我在iOS模拟器上运行此程序时,当视觉状态更改为Selected时,看不到设置器被触发。如果我将设置器中的属性更改为BackgroundColorText,则会看到预期的行为。该问题似乎特定于自定义属性。我查看了Setter.Property的文档,它指出可以将Setter应用于BindablePropertyIsSelected。我是在做错什么,还是VSM不支持此功能?

xamarin xamarin.forms visualstatemanager
1个回答
0
投票

据我所知,您不会在代码的任何一行中更改视觉状态,您需要使用VisualStateManager.GoToState激活视觉状态。

© www.soinside.com 2019 - 2024. All rights reserved.