【发布时间】:2019-02-01 12:11:04
【问题描述】:
我的 Xamarin Forms 应用程序中有一个文本字段和一个按钮。如果按钮的当前可见性为真,并且如果用户点击了按钮,则可见性需要更改为假,反之亦然。
为了进一步增加复杂性,如果用户点击页面的任何其他部分,文本字段的可见性也会更改为 false。
这是文本字段的 XAML 部分
<controls:CustomEntry
x:Name="FirstNameEntry"
Text= "{Binding FirstName}"
IsVisible="{Binding EntryVisible}">
<controls:CustomEntry.Triggers>
<DataTrigger TargetType="controls:CustomEntry"
Binding="{Binding EntryVisible}" Value="true">
<Trigger.EnterActions>
<triggers:EntryFocusTrigger/>
</Trigger.EnterActions>
</DataTrigger>
<Trigger TargetType="controls:CustomEntry"
Property="IsFocused" Value="false">
<Setter Property="IsVisible" Value="false" />
</Trigger>
</controls:CustomEntry.Triggers>
</controls:CustomEntry>
注意:我在 XAML 中的数据触发器是在用户单击按钮时将焦点移到条目上,以便键盘也可见。
这是我的按钮代码
<Button
Text="Key in Name"
Command="{Binding ToggleEntryCommand}"
HeightRequest="50"/>
ViewModel 中的命令
public Command ToggleEntryCommand
{
get
{
return new Command(() =>
{
EntryVisible = !EntryVisible;
});
}
}
触发代码
public class EntryFocusTrigger : TriggerAction<CustomEntry>
{
protected override void Invoke(CustomEntry entry)
{
entry.Focus();
}
}
当前问题
如果用户切换按钮,文本字段的可见性将按预期工作。
但如果用户单击页面上的其他位置,文本字段会消失,但用户现在需要在按钮上单击两次才能重新打开可见性。
感谢您帮助解决此问题。我也尝试过为 EntryVisible 属性设置绑定模式 = 两种方式。但确实不能解决问题。
我还想知道是否有更优雅的方式来编写相同的内容,而无需使用代码隐藏文件。
【问题讨论】:
-
你能在这里分享
EntryFocusTrigger吗? -
@Motumbo:我现在有。请检查修改后的代码
-
Binding="{Binding EntryVisible}" Value="true">尝试将 Value 设置为 false 看看会发生什么 -
和代码后面(丑陋的解决方案)
protected override void OnAppearing() { base.OnAppearing(); myViewModel.IsEntryVisible = FirstNameEntry.IsVisible; }
标签: xamarin xamarin.forms