在 .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
{
}
}
看起来你想给一个条目添加一个自定义行为。如果
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
,这将是一个更传统的名称。