2017-03-24 22 views
2

我正在使用FormsCommunityToolkit NuGet包使其在Xamarin.Forms應用程序中的所有條目在用戶單擊它們時選擇所有文本。使用在XAML的Entry這種效果上their GitHub的例子是這樣的:Xamarin.Forms向XAML中的所有條目添加效果

<Entry Placeholder="focus this entry." VerticalOptions="Start" Text = "FOCUS THIS!"> 
    <Entry.Effects> 
    <effects:SelectAllTextEntryEffect /> 
    </Entry.Effects> 
</Entry> 

這工作,如果你把它放在你的代碼的每個Entry,但我有很多條目,並想將其設置作爲我的App.xaml文件夾中的默認值。我嘗試這樣做:

<Style TargetType="Entry"> 
    <Setter Property="Keyboard" Value="Text"/> <!--Defaults to capitalize first word--> 
    <Setter Property="Effects" Value="effects:SelectAllTextEntryEffect" /> 
</Style> 

此方法適用於設置默認Keyboard所有條目,但設置這樣的效果崩潰的應用程序與此錯誤:

Can't resolve EffectsProperty on Entry 

有誰知道的一種方式這樣做,所以我不需要將代碼添加到我的所有條目?

回答

1

爲什麼不創建自己的Entry這有效果?

因此創建一個Entry的繼承,我將其稱爲EffectEntry。您可以通過創建一個新的XAML文件並將您的Entry的內容放在那裏。喲可能想要刪除像PlaceHolderText這樣的屬性,但是如果您希望將所有條目的屬性設置爲默認值,請在此處應用它們。

<Entry> 
    <Entry.Effects> 
    <effects:SelectAllTextEntryEffect /> 
    </Entry.Effects> 
</Entry> 

轉到後臺代碼,並確保您EffectEntry繼承Entry

namespace MyApp.Controls 
{ 
    public partial class EffectEntry : Button 
    { 
     public EffectEntry() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

現在,在您的應用程序的其餘部分你可以用你的Entry與已加入這樣的效果:

<controls:EffectEntry Placeholder="focus this entry." VerticalOptions="Start" Text = "FOCUS THIS!" /> 

注意controls是,你必須要自己添加一個命名空間。名字可能不同於。在一整頁的背景下,可能看起來像這樣:

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

+0

我設置了這一切,並得到以下錯誤:「Xamarin.Forms.Xaml.XamlParseException:位置96:121。找不到關鍵的selectAllEntry StaticResource」。我使用本地,控件和效果的條目在我的頁面中設置了命名空間。在我的EffectEntry Xaml中還有效果的命名空間。任何想法我做錯了什麼? – cvanbeek

+0

該錯誤與以這種方式實現條目無關。這聽起來像你正在嘗試使用靜態資源(在你的XAML中找到'{StaticResource selectAllEntry}'),這是找不到的。確保您在使用'selectAllEntry'資源的頁面中包含資源字典 –

+0

是否有相關文檔?我相信這是正確的答案,我只是困惑到如何實現它。 – cvanbeek