【问题标题】:Xamarin Forms User Interface does not update to reflect XAML changes on AndroidXamarin 表单用户界面不会更新以反映 Android 上的 XAML 更改
【发布时间】:2020-07-16 02:12:16
【问题描述】:

我有一个 Xamarin Forms 项目,其中包含 iOS 和 Android 应用程序。前几天,我对 XF 和 Visual Studio 2019 做了几次更新(运行最新的非 beta 版本)。在此过程中,我还将我的一堆共享代码(包括在我的产品的多个项目中使用的 ContentViews)移动到一个单独的 .Net Core 类库中。一切正常后,我正在调试我的 Android 项目中的一个共享内容视图。我开始注意到我对 ContentView 的 XAML 所做的更改并没有反映在我在 Android 设备上的 XAML 中。只是为了仔细检查,我运行了该项目的 iOS 版本,一切正常。

这是我的解决方案资源管理器的样子:

Kiosk 项目是 Xamarin Forms 应用程序。 UCISharedAll 包含 UCIFooter 文件夹中的共享 ContentView。

这是来自页脚的 XAML

<?xml version="1.0" encoding="UTF-8"?>
<ContentView 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"
             xmlns:sfbtn="clr-namespace:Syncfusion.XForms.Buttons;assembly=Syncfusion.Buttons.XForms"
             xmlns:localapp="clr-namespace:UCISharedAll.Resources;assembly=UCISharedAll"
             mc:Ignorable="d"
             x:Class="UCISharedAll.UCIFtr.UCIFooter">

    <ContentView.Resources>
        <ResourceDictionary>
            <Style x:Key="slBackground" TargetType="StackLayout" >
                <Setter Property="BackgroundColor" Value="{DynamicResource FooterBackgroundColor}" />
                <Setter Property="HorizontalOptions" Value="Fill" />
                <Setter Property="VerticalOptions" Value="End" />
                <Setter Property="Orientation" Value="Vertical" />
                <Setter Property="Margin" Value="0,0,0,0" />
            </Style>

            <Style x:Key="ftrLblStyle" TargetType="Label">
                <Setter Property="TextColor" Value="{DynamicResource FooterTextColor}" />
                <Setter Property="VerticalOptions" Value="Center" />
                <Setter Property="HorizontalOptions" Value="Center" />
                <Setter Property="HorizontalTextAlignment" Value="Center" />
                <Setter Property="FontSize" Value="Micro" />
            </Style>

            <Style x:Key="ftrLinkStyle" TargetType="Label">
                <Setter Property="TextColor" Value="{DynamicResource FooterTextColor}" />
                <Setter Property="VerticalOptions" Value="Center" />
                <Setter Property="HorizontalOptions" Value="Center" />
                <Setter Property="HorizontalTextAlignment" Value="Center" />
                <Setter Property="FontSize" Value="Micro" />
                <Setter Property="TextDecorations" Value="Underline" />
                <Setter Property="FontAttributes" Value="Bold" />
            </Style>


            <Style x:Key="PrivacyButtonStlye" TargetType="sfbtn:SfButton">
                <Setter Property="BorderColor" Value="#4D648D"/>
                <Setter Property="IsCheckable" Value="False" />                 
                <Setter Property="FontSize" Value="Micro" />
                <Setter Property="CornerRadius" Value="10"/>
                <Setter Property="ImageAlignment" Value="Start" />
                <Setter Property="BackgroundColor" Value="{DynamicResource PrivacyBtnBackgroundColor}" />
                <Setter Property="TextColor" Value="{DynamicResource PrivacyBtnTextColor}" />
                <Setter Property="HorizontalTextAlignment" Value="Center" />
                <Setter Property="ShowIcon" Value="true"/>
                <Setter Property="FontAttributes" Value="Bold" />
                <Setter Property="HorizontalOptions" Value="Center" />
                <Setter Property="VerticalOptions" Value="Start" />
                <Setter Property="ImageSource" Value="lock.png" />
                <Setter Property="Padding" Value="8" />
            </Style>

        </ResourceDictionary>
    </ContentView.Resources>

    <ContentView.Content>
        <StackLayout x:Name="slMaster" Style="{DynamicResource slBackground}" >
            <StackLayout x:Name="slUserFooterArea" Orientation="Vertical" IsVisible="{Binding ShowFooterText}" 
                         HorizontalOptions="Fill" VerticalOptions="Start" Margin="0,4,0,4">
                <Label x:Name="lblUserFooterText" Text="{Binding KioskFooterText}" Style="{DynamicResource ftrLblStyle}" />
                <BoxView BackgroundColor="{DynamicResource DividerLineColor}" HeightRequest="2" HorizontalOptions="Fill" />
            </StackLayout>

            <!--This has to be in a stack layout so it does not go all the way across the screen-->
            <StackLayout Orientation="Horizontal" HorizontalOptions="Center" VerticalOptions="Start" Margin="0,8,0,0">
                <sfbtn:SfButton x:Name="btnPrivacy" Text="{localapp:Translate Privacy}" Clicked="btnPrivacyStatement_Clicked"
                                Style="{DynamicResource PrivacyButtonStlye}" />
            </StackLayout>
            <StackLayout Orientation="Horizontal" Margin="0,8,0,0" HorizontalOptions="Center">
                <Label x:Name="lblAppFooterText" Style="{DynamicResource ftrLblStyle}" />
                <sfbtn:SfButton x:Name="btnPSSName" Clicked="btnPSSName_Clicked" HeightRequest="32">
                    <Label x:Name="lblPSSName" Text="{localapp:Translate PSSName}" Style="{DynamicResource ftrLinkStyle}"/>
                </sfbtn:SfButton>
            </StackLayout>
        </StackLayout>
    </ContentView.Content>
</ContentView>

为了测试,我在 lblPSSName 上添加了背景颜色。在 iOS 项目中,一切都很好。在 Android 项目中,UI 没有更新。我在物理设备(Digiland 平板电脑)上运行 Android 应用程序。

我似乎能够让应用程序在 Android 平板电脑上更新的唯一方法是删除应用程序并在调试和发布之间来回更改配置(即,如果它在上次运行时调试,请更改它释放等)

我的测试测试结果如下:((我在每次测试之间卸载应用程序) 在发布模式下的模拟器上 - 更改可见

在调试模式下的模拟器上 - 更改不可见

在调试模式下的 Digiland 平板电脑上 - 更改不可见 在发布模式下的 Digiland 平板电脑上 - 更改不可见 在调试模式下的 Android 平板电脑模拟器上 - 更改不可见

在发布模式下的 Android 平板电脑模拟器上 - 更改不可见

我已经尝试了所有这些文章中的建议,它们没有任何区别:

User Interface Not Reflecting Changes i make

https://forums.xamarin.com/discussion/45327/newest-version-of-code-not-always-deployed-when-debugging-from-xamarin-studio

Xamarin.Forms Android VS2017 debug not showing XAML changes

我还尝试更改一些 android 选项,如下所示

我关闭了启用加速渲染并启用了代码更改时刷新布局预览。

如果有人对如何解决此问题有任何想法,我将不胜感激。需要明确的是,我前一段时间发生了这种情况 - 然后它就消失了。之后进行了几次更新 - 它似乎又回来了,但这次仅适用于 Android。以下是我的 VS About 页面中的所有内容。

Microsoft Visual Studio 专业版 2019 版本 16.5.2 VisualStudio.16.Release/16.5.2+29926.136 微软 .NET 框架 版本 4.8.03752

安装版本:专业版

Visual C++ 2019 00435-20050-31374-AA182 微软 Visual C++ 2019

ADL 工具服务提供者 1.0 此包包含 Data Lake 工具使用的服务

ASA 服务提供商 1.0

ASP.NET 和 Web 工具 2019 16.5.236.49856 ASP.NET 和 Web 工具 2019

ASP.NET Web 框架和工具 2019 16.5.236.49856 欲了解更多信息,请访问https://www.asp.net/

Azure 应用服务工具 v3.0.0 16.5.236.49856 Azure 应用服务工具 v3.0.0

Azure 数据湖节点 1.0 此包包含 Server Explorer 的 Data Lake 集成节点。

适用于 Visual Studio 2.4.5000.0 的 Azure 数据湖工具 适用于 Visual Studio 的 Microsoft Azure Data Lake 工具

Azure 函数和 Web 作业工具 16.5.236.49856 Azure Functions 和 Web 作业工具

适用于 Visual Studio 2.4.5000.0 的 Azure 流分析工具 适用于 Visual Studio 的 Microsoft Azure 流分析工具

C# 工具 3.5.0-beta4-20153-05+20b9af913f1b8ce0a62f72bea9e75e4aa3cf6b0e IDE 中使用的 C# 组件。根据您的项目类型和设置,可能会使用不同版本的编译器。

常用 Azure 工具 1.10 提供供 Azure 移动服务和 Microsoft Azure 工具使用的通用服务。

可扩展性消息总线 1.2.0 (d16-2@8b56e20) 为松散耦合的 Visual Studio 扩展组件通信和集成提供通用的基于消息传递的 MEF 服务。

Fabric.DiagnosticEvents 1.0 结构诊断事件

IntelliCode 扩展 1.0 IntelliCode Visual Studio 扩展详细信息

Microsoft Azure HDInsight Azure 节点 2.4.5000.0 Azure 节点下的 HDInsight 节点

Microsoft Azure Hive 查询语言服务 2.4.5000.0 Hive 查询语言服务

适用于 Visual Studio 16.0 的 Microsoft Azure Service Fabric 工具 适用于 Visual Studio 的 Microsoft Azure Service Fabric 工具

Microsoft Azure 流分析语言服务 2.4.5000.0 Azure 流分析的语言服务

Microsoft Azure 流分析节点 1.0 Azure 节点下的 Azure 流分析节点

微软 Azure 工具 2.9 适用于 Microsoft Visual Studio 2019 的 Microsoft Azure 工具 - v2.9.30207.1

适用于 Visual Studio 0.4 的 Microsoft 持续交付工具 在 Visual Studio IDE 中简化 Azure DevOps 管道的配置。

Microsoft JVM 调试器 1.0 支持将 Visual Studio 调试器连接到与 JDWP 兼容的 Java 虚拟机

Microsoft 库管理器 2.1.25+gdacdb9b7a1 轻松将客户端库安装到任何 Web 项目中

基于微软 MI 的调试器 1.0 支持将 Visual Studio 连接到兼容 MI 的调试器

Microsoft Visual C++ 向导 1.0 Microsoft Visual C++ 向导

Microsoft Visual Studio 进程编辑器 1.0 Microsoft Visual Studio Team Foundation Server 的流程编辑器

Microsoft Visual Studio 容器工具 1.1 在目标环境中开发、运行和验证您的 ASP.NET Core 应用程序。 F5 将您的应用程序直接放入带有调试功能的容器中,或 CTRL + F5 编辑和刷新您的应用程序,而无需重新构建容器。

Microsoft Visual Studio VC 包 1.0 Microsoft Visual Studio VC 包

Visual Studio 16.5.514 (c4f36a9) 的单声道调试 支持使用 Visual Studio 调试 Mono 进程。

NuGet 包管理器 5.5.0 Visual Studio 中的 NuGet 包管理器。有关 NuGet 的更多信息,请访问https://docs.nuget.org/

ProjectServicesPackage 扩展 1.0 ProjectServicesPackage Visual Studio 扩展详细信息

SQL Server 数据工具 16.0.62003.05170 Microsoft SQL Server 数据工具

ToolWindowHostedEditor 1.0 将 json 编辑器托管到工具窗口中

TypeScript 工具 16.0.20225.2001 Microsoft Visual Studio 的 TypeScript 工具

Visual Basic 工具 3.5.0-beta4-20153-05+20b9af913f1b8ce0a62f72bea9e75e4aa3cf6b0e IDE 中使用的 Visual Basic 组件。根据您的项目类型和设置,可能会使用不同版本的编译器。

用于跨平台移动开发的 Visual C++ (Android) 16.0.29814.53 用于跨平台移动开发 (Android) 的 Visual C++

适用于 F# 4.7 的 Visual F# 工具 10.8.0.0 16.5.0-beta.20104.8+7c4de19faf36647c1ef700e655a52350840c6f03 适用于 F# 4.7 的 Microsoft Visual F# 工具 10.8.0.0

Visual Studio 代码调试适配器主机包 1.0 用于在 Visual Studio 中托管 Visual Studio Code 调试适配器的互操作层

Visual Studio 容器工具扩展(预览版)1.0 在 Visual Studio 中查看、管理和诊断容器。

Visual Studio 容器工具 1.0 用于容器的 Visual Studio 工具

适用于 Kubernetes 1.0 的 Visual Studio 工具 适用于 Kubernetes 的 Visual Studio 工具

VisualStudio.DeviceLog 1.0 关于我的包裹的信息

VisualStudio.Foo 1.0 关于我的包裹的信息

VisualStudio.Mac 1.0 Visual Studio 的 Mac 扩展

Xamarin 16.5.000.528 (d16-5@2b54082) 支持 Xamarin.iOS 和 Xamarin.Android 开发的 Visual Studio 扩展。

Xamarin Designer 16.5.0.470 (remotes/origin/d16-5@681de3fd6) 用于在 Visual Studio 中启用 Xamarin Designer 工具的 Visual Studio 扩展。

Xamarin 模板 16.5.49 (0904f41) 使用 Xamarin 和 Xamarin.Forms 构建 iOS、Android 和 Windows 应用程序的模板。

Xamarin.Android SDK 10.2.0.100 (d16-5/988c811) Xamarin.Android 参考程序集和 MSBuild 支持。 单声道:c0c5c78 Java.Interop:xamarin/java.interop/d16-5@fc18c54 ProGuard:xamarin/proguard/master@905836d SQLite:xamarin/sqlite/3.28.0@46204c4 Xamarin.Android 工具:xamarin/xamarin-android-tools/d16-5@9f4ed4b

Xamarin.iOS 和 Xamarin.Mac SDK 13.16.0.11 (aa73e41) Xamarin.iOS 和 Xamarin.Mac 参考程序集和 MSBuild 支持。

【问题讨论】:

  • 你在其他设备上测试过吗?
  • 我更新了我的测试信息说我也在安卓平板模拟器上测试过它也没有更新..
  • 我们不确定需要在 Android 上更新哪些更改。能否提供正确的IOS和Android截图?
  • 我将尝试创建一个示例来演示问题并发布到 GitHub。

标签: xaml xamarin.forms xamarin.android


【解决方案1】:

其实我想我知道问题出在哪里了......这是场景

我创建了两个主题 - 浅色和深色,并且最初在每个主题类中复制了样式定义。所以——我使用 {DynamicResource MyStyle} 将样式的使用添加到我的 XAML。

问题是每当我想更改样式时,我必须在两个地方进行更改。所以 - 我将样式移到使用它们的特定页面中。 (幸运的是,个别页面非常具体。)但是,当我这样做时,我从未将 DynamicResource 条目更改为 StaticResource 条目。我不确定这些样式为什么会这样工作,但它们确实如此,而且我没有收到任何错误消息。无论如何,我现在将它们全部更改为 StaticResources,问题似乎已经平静下来。

在我进行更多测试之前,我不会将此标记为答案,但到目前为止还不错。

【讨论】:

  • 所以这并没有解决问题。我正在用一些例子等更新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-10
相关资源
最近更新 更多