by Stian

Silverlight debugging i Firefox

Microsoft SilverlightHvis du som Silverlight utvikler har Firefox som din default nettleser har du kanskje blitt frustrert over at debuggeren ikke har kunne koble seg til dine breakpoints i Visual Studio. Etter å ha sjekket femten ganger at du står i debug mode har du fremdeles bare tomme røde sirkler i Visual Studio som sier “No debug symbols have been loaded…”.

Følg denne oppskriften:

  1. Skriv følgende i adresselinjen i Firefox: about:config
  2. Les advarselen og lov å være forsiktig 😉
  3. Søk etter et valg som heter “npctrl
  4. Du får frem et treff under “dom.ipc.plugins.enabled.npctrl.dll
  5. Endre denne fra “true” til “false” ved å trykke “Toggle”
  6. Restart Firefox

Nå skal debugging virke som normalt i Firefox!

by Andreas

Silverlight 4 Default button

Silverlight har ikke den innebygde Default button propertien som støttes i for eksempel Panels i ASP.NET. For de utviklerne som lever et liv i skyggen sørger denne for at du kan peke på en control innenfor et panel hvor Click event skal kalles når brukeren trykker Enter. Et typisk eksempel er en login-side hvor Enter simulerer trykk på Log in-knappen.

Silverlight / XAML har ikke denne muligheten – merkelig nok. Det er derfor en del fremgangsmåter rundt på nettet, men denne her er grei og fungerer i Silverlight 4.

Denne koden er frekt og freidig (og sikkert uten samtykke) lånt av Patrick Cauldwell – men siden jeg gir ham cred så er det sikkert greit.

1. Opprett en klasse i prosjektet, kall denne DefaultButtonService

2. Kopier inn dette (oppdater namespace til ditt eget):


using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Automation.Peers;
using System.Windows.Automation.Provider;

namespace SilverlightDemo
{
public static class DefaultButtonService
{
public static readonly DependencyProperty DefaultButtonProperty =
DependencyProperty.RegisterAttached(“DefaultButton”, typeof(string), typeof(DefaultButtonService), new PropertyMetadata(OnDefaultButtonChanged));

public static string GetDefaultButton(DependencyObject d)
{
return (string)d.GetValue(DefaultButtonProperty);
}

///
/// Sets the CommandParameter property.
///

public static void SetDefaultButton(DependencyObject d, string value)
{
d.SetValue(DefaultButtonProperty, value);
}

private static void OnDefaultButtonChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
TextBox tb = d as TextBox;
if (tb != null)
{
tb.KeyUp += new KeyEventHandler(tb_KeyUp);
}
}

static void tb_KeyUp(object sender, KeyEventArgs e)
{
switch (e.Key)
{
case Key.Enter:
string name = (string)((DependencyObject)sender).GetValue(DefaultButtonProperty);
object root = App.Current.RootVisual;
object button = ((FrameworkElement)root).FindName(name);
if (button is Button)
{
ButtonAutomationPeer peer = new ButtonAutomationPeer((Button)button);

IInvokeProvider ip = (IInvokeProvider)peer;
ip.Invoke();
}
break;
}
}
}
}

3. Legg til et xmlns i XAML:

xmlns:my=”clr-namespace:SilverlightDemo”

4. Legg til en attributt på alle controls som skal trigge at knappen “btnDemo” skal trykkes, for eksempel en textbox: