0
這裏是我的問題:Xamarin.Form.Android EntryRenderer.OnFocusChanged從來沒有所謂的
我創造了一個WEntryRenderer至極從EntryRenderer派生。我的問題很簡單,我已經從EntryRenderer中覆蓋了OnFocusChanged方法,因爲如果出現錯誤,我想停止焦點傳播。問題是,這種方法從來沒有被稱爲..我不明白爲什麼,有沒有人有我的想法?
/// <summary>
/// Renderer Android pour le contrôl WEntry
/// </summary>
public class WEntryRenderer : EntryRenderer
{
protected override void OnFocusChanged(bool gainFocus, [GeneratedEnum] FocusSearchDirection direction, Rect previouslyFocusedRect)
{
bool dontSetFocus = false;
//if (Something goes wrong)
//{
// dontSetFocus = true;
//}
if (!dontSetFocus)
{
base.OnFocusChanged(gainFocus, direction, previouslyFocusedRect);
}
}
}
下面是一個替代的解決方案:
//分支事件
private void SubscribeEvents()
{
//Emit au changement de focus
this.Control.FocusChange += WEntryRenderer_FocusChanged;
}
//代碼相關
private void WEntryRenderer_FocusChanged(object sender, FocusChangeEventArgs e)
{
//Si on perd le focus, on emet l'événement PropertyValidated de la propriété lié au composant
if (!e.HasFocus && wentryRequiringFocus == null)
{
//Emet l'événementValidated
this.currentWEntry.ModelPropertyBinding.OnPropertyValidated();
//Si le composant possède des erreur et qu'aucune requête de focus n'est en cours, le composant requiert le focus
if (!ListManager.IsNullOrEmpty(this.currentWEntry.ErrorList))
{
//Place le focus sur le control courant
this.currentWEntry.Focus();
//On indique à la classe que le focus est demandé par cette instance
WEntryRenderer.wentryRequiringFocus = this.currentWEntry;
}
}
//Si le focus a été demandé par l'instance courante, on libère la demande à la récupération du focus
else if (e.HasFocus && WEntryRenderer.wentryRequiringFocus == this.currentWEntry)
{
//Libère la requête de focus
WEntryRenderer.wentryRequiringFocus = null;
}
}
我不喜歡這個解決方案,因爲即使你強調焦點在實際的實例上,焦點已經被設置爲另一個視圖......它在ListView中造成很多問題
嗨感謝您的awnser :)是的,我做到了。除了這種方法以外的所有東西都可以很好地工作我有一個OnElementPropertyChanged,OnElementChanged,這個wokrs ...但是這個OnFocusChange永遠不會被調用=( –
我更新了一個替代解決方案,你可以試試。 –
我增加了一些信息:)。使用您的解決方案,焦點將設置爲etherway = /我想停止FocusSet。 –