gpt4 book ai didi

c# - 无法在 Xaml 的嵌套类上设置属性

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:56:44 26 4
gpt4 key购买 nike

Xamarin 返回的错误:在 xmlns clr-namespace:AmsterdamTheMapV3 中找不到类型 Foo

问题是我正在尝试定义 Foo 但无论我做什么它都不起作用。我认为问题出在 xmls:local 命名空间内。也许我在代码中犯了一个愚蠢的错误。

这是一个适用于 windows、android 和 apple 的 Xamarin.forms 项目。

Xaml 文件:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="AmsterdamTheMapV3.CityGuide"
xmlns:local="clr-namespace:AmsterdamTheMapV3">
<Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" />
<ScrollView Orientation="Vertical" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
<StackLayout Orientation="Vertical" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Spacing="0">

<!-- Button1 -->
<Image
x:Name="CityGuideButton1"
Source="shopping_gray.png"
Aspect="Fill"
HorizontalOptions="FillAndExpand"
VerticalOptions ="FillAndExpand"
local:Foo.Tag="button1">
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="Categorie_Onclick"
NumberOfTapsRequired="1"/>
</Image.GestureRecognizers>
</Image>
</StackLayout>
</ScrollView>
</ContentPage>

CS文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;

namespace AmsterdamTheMapV3
{
public partial class CityGuide : ContentPage
{
public CityGuide()
{
InitializeComponent();
}

public class Foo
{
public static readonly BindableProperty TagProperty = BindableProperty.Create("Tag", typeof(string), typeof(Foo), null);

public static string GetTag(BindableObject bindable)
{
return (string)bindable.GetValue(TagProperty);
}

public static void SetTag(BindableObject bindable, string value)
{
bindable.SetValue(TagProperty, value);
}
}


async void Categorie_Onclick(Object sender, EventArgs args)
{
Image cmd = sender as Image;
string txt = Foo.GetTag(cmd);
await Navigation.PushAsync(new CategoriePage(txt));
}
}
}

我希望有人能帮助我。
如果需要,我可以提供更多信息。
提前谢谢你!

最佳答案

您不能从 Xaml 中引用嵌套类。

你可以引用我的话,也可以用谷歌搜索,但这是一个普遍的真理。原因是 Xaml 解析器无法根据点号区分附加的 (Bindable|Dependency)Property 和嵌套类访问。

在您的情况下,将您的 Foo 类从 CityGuide 直接移动到命名空间,它应该可以工作。

您的 xmlns 声明 xmlns:local="clr-namespace:AmsterdamTheMapV3" 是正确的,没有 assembly= 部分,因为您指的是当前程序集。

有关类似答案的更多信息:https://stackoverflow.com/a/14546917/1063783

有些人可能会问为什么不对嵌套类使用 + 符号(就像在 Reflection 中所做的那样)。问题是包含 + 符号的名称不是有效的 xml 元素名称 ( https://www.xml.com/pub/a/2001/07/25/namingparts.html )

关于c# - 无法在 Xaml 的嵌套类上设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40103573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com