我需要一些帮助来排序按钮点击的条目可见性。我尝试了一些不同的东西。以下代码是迄今为止我得到的最好结果。但它也不完美。
要求:当页面显示在屏幕上时,它只有一个按钮可见,当用户点击按钮时,它会显示该条目,如果再次单击该按钮,则该条目应设置为不可见。如果我点击页面中的其他位置,它也应该隐藏条目。
XAML。
<controls:CustomButton
Text="Submit"
TextColor="White"
HorizontalOptions="FillAndExpand"
Command="{Binding TextSubmitCommand}"
Icon="WhiteKeyboard"/>
<controls:CustomEntry
x:Name="ItemEntry"
TextColor="White"
HeightRequest="50"
HorizontalTextAlignment="Center"
VerticalOptions="Center"
IsVisible="{Binding EntryVisible, Mode=TwoWay}">
<controls:CustomEntry.Behaviors>
<behaviors:EventToCommand
Command="{Binding LocationSearchCommand}"
EventName="Completed"/>
</controls:CustomEntry.Behaviors>
<controls:CustomEntry.Triggers>
<DataTrigger TargetType="controls:CustomEntry"
Binding="{Binding EntryVisible}"
Value="true">
<Trigger.EnterActions>
<triggers:EntryFocusTrigger/>
</Trigger.EnterActions>
</DataTrigger>
</controls:CustomEntry.Triggers>
</controls:CustomEntry>
查看模型
public bool EntryVisible { get; set; } = false;
public Command TextSubmitCommand
{
get
{
return new Command(() =>
{
EntryVisible = !EntryVisible;
});
}
}
触发
public class EntryFocusTrigger : TriggerAction<CustomEntry>
{
protected override void Invoke(CustomEntry entry)
{
entry.Focus();
}
}
使用上面的代码,它可以很好地切换按钮点击的可见性。但是,如果我点击页面中的其他位置,键盘会隐藏,但输入仍然存在。所以我尝试添加一个事件触发器。
将以下xaml添加到(XAML页面)
中的自定义条目<EventTrigger Event="Unfocused">
<triggers:EntryUnfocusTrigger />
</EventTrigger>
并且实际触发器定义为:
public class EntryUnfocusTrigger : TriggerAction<CustomEntry>
{
public bool IsVisible { get; set; }
protected override void Invoke(CustomEntry entry)
{
if(entry.IsFocused == false){
entry.IsVisible = false;
}
}
}
但是在添加上面的代码之后,在第一次切换之后,该条目根本不显示。什么是干净的方式让这个工作。期待您的帮助。
答案 0 :(得分:0)
尝试添加此Trigger
以在条目未聚焦时隐藏:
<Trigger TargetType="controls:CustomEntry"
Property="IsFocused" Value="False">
<Setter Property="IsVisible" Value="false" />
</Trigger>
使用此功能,您不需要自定义触发器类。
希望这会有所帮助.-