程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用 MVVM 在 Xamarin.Forms 中单击时如何更改 Frame 控件的颜色大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用 MVVM 在 Xamarin.Forms 中单击时如何更改 Frame 控件的颜色?

开发过程中遇到使用 MVVM 在 Xamarin.Forms 中单击时如何更改 Frame 控件的颜色的问题如何解决?下面主要结合日常开发的经验,给出你关于使用 MVVM 在 Xamarin.Forms 中单击时如何更改 Frame 控件的颜色的解决方法建议,希望对你解决使用 MVVM 在 Xamarin.Forms 中单击时如何更改 Frame 控件的颜色有所启发或帮助;

我知道这个问题已经被问过很多次了,但我一直无法使用其他问题中提供的解决方案来解决这个问题。

问题来了: 我想在单击框架时更改它的背景颜色,并在单击另一个框架时恢复它的颜色。

页面.xaml

    where:
    statusCode | expectedResult
    200        | 2
    400        | 3
    404        | "ERROR"

Pageviewmodel.cs

<ScrollVIEw OrIEntation="Horizontal" GrID.Row="1" HorizontalScrollbarVisibility="Never" BACkgroundcolor="transparent">
        <StackLayout OrIEntation="Horizontal" 
                     margin="15,8,0">
            <StackLayout OrIEntation="Horizontal" BindableLayout.Itemssource="{Binding CategorIEs}">
                <BindableLayout.ItemTemplate>
                    <DataTemplate x:DataType="model:categoryDTO">
                        <Frame BACkgroundcolor="{Binding source={relativesource AncestorType={x:Type vm:Pageviewmodel}},Path=Framecolor}"
                       CornerRadius="15"
                       VerticalOptions="Center"
                       HasShadow="false"
                       padding="15,8">
                            <Label Text="{Binding namE}"
                               FontSize="Micro"
                               HorizontalOptions="Center"
                               VerticalOptions="Center"
                               Textcolor="White"
                               FontAttributes="Bold" />
                            <Frame.GestureRecognizers>
                                <TapGestureRecognizer
                                    numberOfTapsrequired="1"
                                    Command="{Binding source={relativesource AncestorType={x:Type vm:Pageviewmodel}},Path=categoryTappeD}"
                                    CommandParameter="{Binding .}">
                                </TapGestureRecognizer>
                            </Frame.GestureRecognizers>
                        </Frame>
                    </DataTemplate>
                </BindableLayout.ItemTemplate>
            </StackLayout>

非常感谢您的帮助。

解决方法

您的类别 DTO 应该实现 INotifyPropertyChanged 并在其中包含一个 IsSELEcted 公共属性。

<Frame.triggers>                                                            
   <Datatrigger TargetType="Frame"                                                                                 
               Binding="{Binding IsSELEcteD}"                                                                                 
               Value="True">                                                                        
      <Setter Property ="BACkgroundColor" Value ="Yellow"/>                                                                   
   </Datatrigger>                                                                  
   <Datatrigger TargetType="Frame"                                                                              
               Binding="{Binding IsSELEcteD}"                                                                              
               Value="false">                                                                      
      <Setter Property ="BACkgroundColor" Value ="White"/>                                                                
   </Datatrigger>                                                            
</Frame.triggers>
,
  1. 您的类别 DTO 应从 BindableBase 继承,并在其中包含一个 IsSELEcted 公共属性。
  2. 创建一个继承自 IValueConverter 的转换器类,这将根据是否已选择项目返回颜色
  3. 在您的 .Xaml 框架背景色中,将其绑定到 IsSELEctedProperty 并将转换器属性分配给上面创建的转换器
  4. 然后在你的点击手势中你想将它绑定到 CategorySELEctedCommand
  5. 最后,在您的 ViewModel 的 CategorySELEctedCommand 中,您要将所有列表项的 isSELEcted 属性重置为 false,但所选项目除外
  6. 然后繁荣一切都应该按预期工作

我使用prism MVVM 创建了一个示例应用程序,您可以将其克隆并在您的机器上本地运行here

,

您可以在 Frame 上添加焦点事件,例如:

   <Frame x:Name="frame1" 
    BACkgroundColor="Blue"
               Focused="onfocus">
        </Frame>
        <Frame x:Name="frame2" 
    BACkgroundColor="Blue"
                Focused="onfocus">

背后的代码:

  public void onfocus(object obj,EventArgs E)
    {
        var myframe = obj as Frame;
        myframe.BACkgroundColor = Color.Red;
    }

大佬总结

以上是大佬教程为你收集整理的使用 MVVM 在 Xamarin.Forms 中单击时如何更改 Frame 控件的颜色全部内容,希望文章能够帮你解决使用 MVVM 在 Xamarin.Forms 中单击时如何更改 Frame 控件的颜色所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。