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.
答案 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 = "";
}