How autoclear a EntryCell in Xamarin.Forms?

时间:2017-08-08 22:20:14

标签: xamarin xamarin.forms

I have a EntryCell that need to AutoClear each time the user select it. I know how do that on iOS directly but not with Xamarin.Forms.

2 个答案:

答案 0 :(得分:0)

如果您的意思是在条目聚焦时清除该值,则可以通过几种方式实现。

简单方法:处理Focused事件。

<Entry Placeholder="Name" HorizontalOptions="FillAndExpand" Focused="Handle_Focused" />

并在代码中

void Handle_Focused(object sender, Xamarin.Forms.FocusEventArgs e)
{
    ((Entry)sender).Text = string.Empty;
}

请注意,您也可以在((Entry)sender).ClearValue(Entry.TextProperty);方法中使用Handle_Focused

或者使用更简单,更清洁的方式:使用Behavior

namespace YourRootNamespace.Behaviors
{
    public class EntryClearOnFocusBehavior : Behavior<Entry>
    {
        protected override void OnAttachedTo(Entry bindable)
        {
            if (bindable == null)
            {
                throw new InvalidOperationException("Entry was null. Behavior can only be atached to an Entry");
            }

            bindable.Focused += OnEntryFocused;

            base.OnAttachedTo(bindable);
        }

        protected override void OnDetachingFrom(Entry bindable)
        {
            bindable.Focused -= OnEntryFocused;

            base.OnDetachingFrom(bindable);
        }

        void OnEntryFocused(object sender, FocusEventArgs e)
        {
            ((Entry)sender).ClearValue(Entry.TextProperty);
        }
    }
}

然后在你的XAML中你会:

在ContentPage定义xmlns:behaviors="clr-namespace:YourRootNamespace.Behaviors"

中添加此命名空间

并将行为附加到Entry(或条目)。

<Entry Placeholder="Last Name" HorizontalOptions="FillAndExpand">
    <Entry.Behaviors>
        <behaviors:EntryClearOnFocusBehavior />
    </Entry.Behaviors>
</Entry>

这种方式是我的最爱,因为它可以让你重复使用。

您可以更进一步,使用此行为创建Style,因此附加行为就像添加样式一样简单。有关此here的更多信息。

希望这会有所帮助.-

答案 1 :(得分:0)

你可以使用触发器,这是非常简单的解决方案

<Entry Placeholder="enter name">
    <Entry.Triggers>
        <Trigger TargetType="Entry"
             Property="IsFocused" Value="True">
            <Setter 
                Property="Text"
                Value="" />
        </Trigger>
    </Entry.Triggers>
</Entry>

对于EntryCell:

XAML代码

 <ListView x:Name="listView" SeparatorVisibility="None" ItemsSource="{x:Static local:HomeViewModel.lights}">
        <ListView.ItemTemplate>
              <DataTemplate>
                    <EntryCell Label="{Binding comment}" Text="{Binding name}" Tapped="Item_Tapped" />
              </DataTemplate>
        </ListView.ItemTemplate>
 </ListView>

背后的代码

 void Item_Tapped(object sender, System.EventArgs e)
    {
         ((EntryCell)sender).Text = "";
    }