如何在Xamarin Forms中更改控件的视觉状态?

鲁文德拉·尤汉(Ruvindra Yohan)

我试图使用普通的xamarin表单制作类似于视图的选项卡,因为我不想使用任何第三方插件。为此,我使用了如下两个框架,并在点击该框架以使其看起来像这样时将其状态更改为“已选择”和“未选择”。

在此处输入图片说明

镜框样式:

<Style TargetType="Frame">
                <Setter Property="VisualStateManager.VisualStateGroups">
                    <VisualStateGroupList>
                        <VisualStateGroup>
                            <VisualState x:Name="Selected">
                                <VisualState.Setters>
                                    <Setter Property="BackgroundColor" Value="Orange" />
                                </VisualState.Setters>
                            </VisualState>
                            <VisualState x:Name="UnSelected">
                                <VisualState.Setters>
                                    <Setter Property="BackgroundColor" Value="White" />
                                </VisualState.Setters>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateGroupList>
                </Setter>
            </Style>

我的相框:

<Frame x:Name="AllNewsTab" Padding="10,5,10,5" CornerRadius="3" HasShadow="False" VerticalOptions="FillAndExpand">
                    <Label Text="All" FontFamily="{StaticResource BoldFont}" TextColor="{StaticResource BodyTextColor}" FontSize="Medium" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" HorizontalOptions="Center"/>
                    <Frame.GestureRecognizers>
                        <TapGestureRecognizer NumberOfTapsRequired="1" Tapped="Tab_Tapped"/>
                    </Frame.GestureRecognizers>
                </Frame>

监听事件:

private void Tab_Tapped(object sender, EventArgs e)
        {
            if (frameSelected != null)
                VisualStateManager.GoToState(frameSelected, "UnSelected");

            VisualStateManager.GoToState((Frame)sender, "Selected");

            frameSelected = (Frame)sender;
}

但是,我希望页面首次出现时看起来选中一个框架。因此,我尝试在OnAppearing方法页面中这样做。但这是行不通的。这里有什么问题?

protected override void OnAppearing()
        {
            VisualStateManager.GoToState(AllNewsTab, "Selected");

            base.OnAppearing();
        }
吉诺·沙吉

尝试此操作,在xamarin中,VisualElement具有4种状态,例如“正常”,“禁用”,“聚焦”,“选定”。我们可以定义自己的VisualElement。

MainPage.Xml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             x:Class="Xam_VS_Test.Views.MainPage">
    <ContentPage.Resources>
        <Style TargetType="Frame">
            <Setter Property="VisualStateManager.VisualStateGroups">
                <VisualStateGroupList>
                    <VisualStateGroup Name="SelectionStates">
                        <VisualState x:Name="Selected">
                            <VisualState.Setters>
                                <Setter Property="BackgroundColor" Value="Orange" />
                            </VisualState.Setters>
                        </VisualState>
                        <VisualState x:Name="UnSelected">
                            <VisualState.Setters>
                                <Setter Property="BackgroundColor" Value="White" />
                            </VisualState.Setters>
                        </VisualState>
                    </VisualStateGroup>
                </VisualStateGroupList>
            </Setter>
        </Style>
    </ContentPage.Resources>
    <ContentPage.Content>
        <StackLayout Orientation="Vertical" >
            <Frame x:Name="AllNewsTab" Padding="10,5,10,5" HeightRequest="20" WidthRequest="50" HorizontalOptions="FillAndExpand" CornerRadius="3" HasShadow="False" VerticalOptions="FillAndExpand">
                <Label Text="All" FontSize="Large" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" HorizontalOptions="Center"/>
                <Frame.GestureRecognizers>
                    <TapGestureRecognizer NumberOfTapsRequired="1" Tapped="Tab_Tapped"/>
                </Frame.GestureRecognizers>
            </Frame>
            <Frame x:Name="AllNewsTab2" Padding="10,5,10,5" HeightRequest="20" WidthRequest="50" HorizontalOptions="FillAndExpand" CornerRadius="3" HasShadow="False" VerticalOptions="FillAndExpand">
                <Label Text="1" FontSize="Large" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" HorizontalOptions="Center"/>
                <Frame.GestureRecognizers>
                    <TapGestureRecognizer NumberOfTapsRequired="1" Tapped="Tab_Tapped"/>
                </Frame.GestureRecognizers>
            </Frame>
            <Frame x:Name="AllNewsTab3" Padding="10,5,10,5" HeightRequest="20" WidthRequest="50" HorizontalOptions="FillAndExpand" CornerRadius="3" HasShadow="False" VerticalOptions="FillAndExpand">
                <Label Text="2" FontSize="Large" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" HorizontalOptions="Center"/>
                <Frame.GestureRecognizers>
                    <TapGestureRecognizer NumberOfTapsRequired="1" Tapped="Tab_Tapped"/>
                </Frame.GestureRecognizers>
            </Frame>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

MainPage.cs

    public partial class MainPage : ContentPage
    {
        Frame frameSelected;
       public MainPage()
       {
           InitializeComponent();
       }
       protected override void OnAppearing()
       {
         if (frameSelected == null)
         {
            VisualStateManager.GoToState(AllNewsTab, "Selected");
            frameSelected = AllNewsTab;
         }
          base.OnAppearing();
        }
        private void Tab_Tapped(object sender, EventArgs e)
        {
            if (frameSelected != null)
                VisualStateManager.GoToState(frameSelected, "UnSelected");

            VisualStateManager.GoToState((Frame)sender, "Selected");

            frameSelected = (Frame)sender;
        }
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Xamarin.Forms中获取/检测屏幕尺寸?

来自分类Dev

如何在Xamarin.Forms中隐藏Android ActionBar?

来自分类Dev

如何在Xamarin.Forms中检测设备的屏幕方向?

来自分类Dev

如何在Xamarin.Forms中访问TableView的子级

来自分类Dev

如何在Xamarin.Forms中设置控件的宽度

来自分类Dev

如何从代码后面更改视觉状态?

来自分类Dev

如何在Xamarin Forms中处理屏幕旋转/方向?

来自分类Dev

如何在Xamarin Forms中处理/取消向后导航

来自分类Dev

如何在Xamarin.Forms中的网格中启用边框

来自分类Dev

如何在Xamarin中拍照?

来自分类Dev

如何在Xamarin Forms中更改进度条的高度?

来自分类Dev

如何在Xamarin.Forms xaml页面中更改图标颜色?

来自分类Dev

如何在Xamarin Forms中的条目上添加视觉前缀?

来自分类Dev

Xamarin-如何在视觉上使用IDE集中控件?

来自分类Dev

如何在Xamarin Mac(MonoMac)中禁用UI控件?

来自分类Dev

如何在xamarin.forms中旋转页面

来自分类Dev

如何在xamarin.forms中旋转页面

来自分类Dev

如何在iOS的Xamarin Forms中创建导航栏?

来自分类Dev

如何在Xamarin.Forms上更改后退按钮文本

来自分类Dev

Xamarin Forms-如何在没有导航页面的情况下更改状态栏的颜色

来自分类Dev

如何在Xamarin.Forms中使用Android控件

来自分类Dev

如何在Xamarin.Forms中创建类似于日志记录控件的功能

来自分类Dev

如何从代码后面更改视觉状态?

来自分类Dev

如何在Xamarin Mac(MonoMac)中禁用UI控件?

来自分类Dev

如何在Xamarin表单中绑定两个控件

来自分类Dev

如何在Xamarin Forms中的字符串(Listview分组字母)上更改textcolor?

来自分类Dev

如何在 IOS Xamarin.Forms 中更改浮动 TextField 默认占位符颜色

来自分类Dev

如何在 Xamarin.Forms 中更改标签的字体系列

来自分类Dev

如何在单独的视觉状态组中处理冲突的视觉状态设置器?

Related 相关文章

  1. 1

    如何在Xamarin.Forms中获取/检测屏幕尺寸?

  2. 2

    如何在Xamarin.Forms中隐藏Android ActionBar?

  3. 3

    如何在Xamarin.Forms中检测设备的屏幕方向?

  4. 4

    如何在Xamarin.Forms中访问TableView的子级

  5. 5

    如何在Xamarin.Forms中设置控件的宽度

  6. 6

    如何从代码后面更改视觉状态?

  7. 7

    如何在Xamarin Forms中处理屏幕旋转/方向?

  8. 8

    如何在Xamarin Forms中处理/取消向后导航

  9. 9

    如何在Xamarin.Forms中的网格中启用边框

  10. 10

    如何在Xamarin中拍照?

  11. 11

    如何在Xamarin Forms中更改进度条的高度?

  12. 12

    如何在Xamarin.Forms xaml页面中更改图标颜色?

  13. 13

    如何在Xamarin Forms中的条目上添加视觉前缀?

  14. 14

    Xamarin-如何在视觉上使用IDE集中控件?

  15. 15

    如何在Xamarin Mac(MonoMac)中禁用UI控件?

  16. 16

    如何在xamarin.forms中旋转页面

  17. 17

    如何在xamarin.forms中旋转页面

  18. 18

    如何在iOS的Xamarin Forms中创建导航栏?

  19. 19

    如何在Xamarin.Forms上更改后退按钮文本

  20. 20

    Xamarin Forms-如何在没有导航页面的情况下更改状态栏的颜色

  21. 21

    如何在Xamarin.Forms中使用Android控件

  22. 22

    如何在Xamarin.Forms中创建类似于日志记录控件的功能

  23. 23

    如何从代码后面更改视觉状态?

  24. 24

    如何在Xamarin Mac(MonoMac)中禁用UI控件?

  25. 25

    如何在Xamarin表单中绑定两个控件

  26. 26

    如何在Xamarin Forms中的字符串(Listview分组字母)上更改textcolor?

  27. 27

    如何在 IOS Xamarin.Forms 中更改浮动 TextField 默认占位符颜色

  28. 28

    如何在 Xamarin.Forms 中更改标签的字体系列

  29. 29

    如何在单独的视觉状态组中处理冲突的视觉状态设置器?

热门标签

归档