如何修复未处理的 xmlns?

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

在 .NET MAUI 项目中,我创建了一个类,我想在 XAML 文件中使用它,所以我添加了一个

xmlns
但是这个命名空间无法访问该类。

我试图通过这个命名空间访问类:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:HossamTest1.behaviorsfolder"
             x:Class="HossamTest1.BehaviorPage"             
             Title="BehaviorPage">

    <StackLayout>
        <Entry local:NumericBehaviorValidation/>
        <!-- here it gives an error-->

    </StackLayout>
</ContentPage>

我在这里尝试向条目添加自定义行为,但问题在命名空间的所有类的所有其他项目中重复出现,所有类都是公共的,我更新了我的 visual studio 本身,但问题仍然存在,c# 代码是

enter code here 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HossamTest1.behaviorsfolder
{
    public static class NumericBehaviorValidation
    {
        public static readonly BindableProperty NumricValidationProperty =
                    BindableProperty.CreateAttached("NumricValidation",typeof(bool),typeof(NumericBehaviorValidation),false,propertyChanged:OnValidation );
        public static bool getNumricValidationProperty(BindableObject view)
        {
            return (bool)view.GetValue(NumricValidationProperty);
        }
        public static void setNumricValidationProperty(BindableObject view,bool value)
        {
            view.SetValue(NumricValidationProperty,value);
        }
        public static void OnValidation(BindableObject view, object  oldvalue,object newvalue)
        {
            Entry entry=view as Entry;
            if (entry == null)
            {
                return;
            }
            bool valid = (bool)newvalue;
            if (valid) 
            {entry.TextChanged+= OnValidationHandler;
            }
            else
            {
                entry.TextChanged -= OnValidationHandler;
            }
        }
        static void OnValidationHandler(object sender, TextChangedEventArgs e)
        {
            Entry entry=sender as Entry;
            double result;
            bool isvalid=double.TryParse(e.NewTextValue, out result);
            entry.TextColor=isvalid?Colors.Green:Colors.Red;
        }
    }
}

然后我做了一个空白的新项目来测试这个问题

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:HOSSAM1"
             x:Class="HOSSAM1.MainPage">

    <ScrollView>
        <VerticalStackLayout
            Spacing="25"
            Padding="30,0"
            VerticalOptions="Center">


            <Label
                Text="Hello, World!"
                SemanticProperties.HeadingLevel="Level1"
                FontSize="32"
                HorizontalOptions="Center" 
               local:Behavoir/>



        </VerticalStackLayout>
    </ScrollView>

</ContentPage>

行为类是一个空的公共类

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

namespace HOSSAM1
{
    public class Behaviors
    {
    }
}
maui xml-namespaces
1个回答
0
投票

看起来你想给一个条目添加一个自定义行为。如果

NumericBehaviorValidation
的命名空间和文件夹路径匹配,您的命名空间似乎没问题。

您可以这样做:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:HossamTest1.behaviorsfolder"
             x:Class="HossamTest1.BehaviorPage"             
             Title="BehaviorPage">

    <StackLayout>
        <Entry>
            <Entry.Behaviors>
                <local:NumericBehaviorValidation />
            </Entry.Behaviors>
        </Entry>
    </StackLayout>

</ContentPage>

作为旁注,我建议将名称更改为

NumericValidationBehavior
,这将是一个更传统的名称。

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