C# 表单为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

我正在使用FormsCommunityToolkit NuGet软件包使我在Xamarin.Forms应用程序中的所有条目在用户单击时选择它们的所有文本。在XAML中对
条目使用此效果的示例如下:

<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>