Colocando focus automaticamente em controles no Winrt / Windows8
Que falta faz o FocusManager, né? Fui tentar colocar focus no primeiro campo de um formulário no WinRt e não achei o dito cujo. Para contornar a situação, vamos criar uma attached property que da conta do recado:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public static class Focus { public static readonly DependencyProperty MappingsProperty = DependencyProperty.RegisterAttached("HasFocus", typeof(bool), typeof(Focus), null); public static bool GetHasFocus(DependencyObject dp) { return GetControl(dp).FocusState != FocusState.Unfocused; } public static void SetHasFocus(DependencyObject dp, bool value) { Control control = GetControl(dp); if(!value) return; control.Loaded += (sender, args) => control.Focus(FocusState.Programmatic); } private static Control GetControl(DependencyObject dp) { var control = dp as Control; if (control == null) { throw new ArgumentException("HasFocus can be only used in Controls"); } return control; } } |
Esta attached property simplesmente pega o controle associado a ela e baseado no booleano especificado, chama […]
Testando JsonResults que retornam tipos anônimos no Asp.Net MVC
Durante muito tempo eu usei reflection ou mesmo helpers que executam o contexto para testar JsonResults que retornam tipos anônimos. Esses dias achei um truque bem legal que vou compartilhar aqui. Suponha a action abaixo:
1 2 3 4 5 6 |
public JsonResult GetSubstacoes(int skip, int take) { return Json(new { total = _rep.Query.Count(), subestacoes = _rep.Query.OrderBy(x => x.Nome).Skip(skip).Take(take) }); } |
ps: eu sei que eu poderia criar uma classe tipada e usar como retorno, mas estou fazendo proposital para […]
Thread.Sleep no WinRT / Windows8
Fui tentar usar o Thread.Sleep() no Windows 8 e descobri que ele não se encontra mais lá. Depois de muito pesquisar, achei 2 formas de substituir a chamada. Dentro de método async:
1 |
await Task.Delay(2000); |
Ou crie um helper para usar em qualquer lugar:
1 2 3 |
public static void Sleep(int ms) { new System.Threading.ManualResetEvent(false).WaitOne(ms); } |