C# 表单为XAML中的所有条目添加效果
我正在使用FormsCommunityToolkit NuGet软件包使我在Xamarin.Forms应用程序中的所有条目在用户单击时选择它们的所有文本。在XAML中对C# 表单为XAML中的所有条目添加效果,c#,xaml,xamarin,xamarin.forms,C#,Xaml,Xamarin,Xamarin.forms,我正在使用FormsCommunityToolkit NuGet软件包使我在Xamarin.Forms应用程序中的所有条目在用户单击时选择它们的所有文本。在XAML中对条目使用此效果的示例如下: <Entry Placeholder="focus this entry." VerticalOptions="Start" Text = "FOCUS THIS!"> <Entry.Effects> <effects:SelectAllTextEntryEff
条目使用此效果的示例如下:
<Entry Placeholder="focus this entry." VerticalOptions="Start" Text = "FOCUS THIS!">
<Entry.Effects>
<effects:SelectAllTextEntryEffect />
</Entry.Effects>
</Entry>
此方法适用于为所有条目设置默认的键盘
,但以这种方式设置效果会导致应用程序崩溃,并出现以下错误:
Can't resolve EffectsProperty on Entry
有人知道这样做的方法吗?这样我就不需要将代码添加到我的所有条目中了?为什么不创建自己的条目
,这样会产生效果
因此,创建条目的继承,我将其称为EffectEntry
。您可以通过创建一个新的XAML文件并将条目的内容放入其中来实现这一点。您可能希望删除诸如占位符
和文本
之类的属性,但是如果您希望在所有条目上都有一个属性作为默认属性,请在此处应用它们
<Entry>
<Entry.Effects>
<effects:SelectAllTextEntryEffect />
</Entry.Effects>
</Entry>
现在,在应用程序的其余部分,您只需使用条目
,效果如下:
<controls:EffectEntry Placeholder="focus this entry." VerticalOptions="Start" Text = "FOCUS THIS!" />
<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MyApp"
xmlns:controls="clr-namespace:MyApp.Controls"
x:Class="MyApp.MyAppPage">
<controls:EffectEntry Placeholder="focus this entry." VerticalOptions="Start" Text = "FOCUS THIS!" />
</ContentPage>
注意顶部有多个xmlns
(XML名称空间)条目。我已经添加了一个控件,你也可以用任何你喜欢的方式来命名它。当您查看EffectEntry
后面的代码时,您将看到此处和此处的命名空间是匹配的。这样应用程序就知道在哪里可以找到控件。如果您决定要将控件移动到它们自己的程序集,您还可以这样定义:xmlns:controls=“clr namespace:MyApp.controls;assembly=MyProject.Example”
我设置了所有这些,但出现了以下错误:“Xamarin.Forms.Xaml.XamlParseException:位置96:121.找不到键selectAllEntry的StaticResource”。我使用本地、控件和效果项在页面中设置名称空间。在my EffectEntry Xaml中还有用于效果的命名空间。知道我做错了什么吗?这个错误与以这种方式实现条目无关。听起来好像您正试图使用一个无法找到的静态资源(在XAML中查找{StaticResource selectAllEntry}
)。确保使用selectAllEntry
resource的页面中包含了资源字典。是否有用于此的文档?我相信这是正确的答案,我只是对如何实现它感到困惑。如果没有看到其余的代码,很难说。但在我看来,错误似乎存在于其他地方。也许在你的App.xaml
中,你仍然定义了某种风格。在代码中查找selectAllEntry
键。因为错误表明了这一点,所以那里似乎有问题。
<controls:EffectEntry Placeholder="focus this entry." VerticalOptions="Start" Text = "FOCUS THIS!" />
<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MyApp"
xmlns:controls="clr-namespace:MyApp.Controls"
x:Class="MyApp.MyAppPage">
<controls:EffectEntry Placeholder="focus this entry." VerticalOptions="Start" Text = "FOCUS THIS!" />
</ContentPage>