[IronPython] [python] Re: Using Silverlight Controls from IronPython (Uhmm... it doesn't look like you can)

Jimmy Schementi Jimmy.Schementi at microsoft.com
Fri Sep 14 04:55:08 CEST 2007


Michael,

Thanks for finding this. Like John said, this is a known issue, however we were not aware it was per application! We are investigating how best to fix this, be it talking to the right people to get the XAML parser updated or removing the dependency on x:Code, whichever comes first. =) We're already in the progress of removing x:Code, since it's the root of this and other Silverlight+DLR integration issues.

Rest-assured, using C# controls in a DLR language is a scenario we definitely want to enable!

As a "today" work-around, you could do as John suggests, however you can't call into that "real" event handler since it's private. You either have to pass on the event handler (which in this case isn't a big deal as it's just an event to continue the button hover animation), or rebuild the event handler in Python. In this case, it's simply:

def PulseStoryboardCompleted(s, e):
        s.Begin()

For other situations, you have the code for the controls, so building them in Python *should* be trivial. I agree, it's a completely un-ideal solution, but that'll get you working today.

~Jimmy


> -----Original Message-----
> From: users-bounces at lists.ironpython.com [mailto:users-
> bounces at lists.ironpython.com] On Behalf Of Michael Foord
> Sent: Thursday, September 13, 2007 3:22 PM
> To: Discussion of IronPython
> Subject: Re: [IronPython] [python] Re: Using Silverlight Controls from
> IronPython (Uhmm... it doesn't look like you can)
>
> John Messerly wrote:
> > Sounds like a bug in XAML event binding...
> >
> > In the Silverlight 1.1 alpha, if the XAML contains an x:Code element,
> then the XAML parser will always go to DLR/IronPython for event hookup.
> That is to say, it will never use reflection to hook the event to a
> statically defined C# method. That is a known limitation.
> >
> > I thought this behavior was per-XAML file, but from what you're
> describing it sounds like it's per application.
> >
> > The only workaround I can think of would be to define a function in
> your Python code for that event ("PulseStoryboardCompleted"), and then
> from that function call into the "real" event handler.
> >
>
> That means I need to know the details of what the XAML is hooking up
> (which I don't) and it also means that I can't use prebuilt controls
> from IronPython which is a major restriction. :-(
>
> Can you apply some gentle pressure in the right places? Jim Hugunin
> showed this working in their Vegas Mix talk - so it would be a shame to
> lose it as basically it means that you can't use IronPython to create
> rich user interfaces except completely from scratch.
>
> All the best,
>
>
> Michael Foord
> http://www.ironpython.info/
>
> > Hope this helps,
> > John
> >
> > -----Original Message-----
> > From: users-bounces at lists.ironpython.com [mailto:users-
> bounces at lists.ironpython.com] On Behalf Of Michael Foord
> > Sent: Wednesday, September 05, 2007 2:23 PM
> > To: Discussion of IronPython
> > Subject: [IronPython] Using Silverlight Controls from IronPython
> (Uhmm... it doesn't look like you can)
> >
> > Hello all,
> >
> > I'm having an issue using Silverlight controls (compiled assemblies)
> > from C#. Something is going wrong with member name resolution and
> XAML
> > interactions.
> >
> > I've had this with controls I've created myself, but it also happens
> > with the sample controls project in the Silverlight 1.1 Refresh SDK.
> >
> > If you try adding a reference to the 'Button' class and using it from
> > IronPython, then Silverlight bombs out with the following message:
> >
> > Exception Details: System.MissingMethodException: Event handler
> > 'PulseStoryboardCompleted' is not defined
> >
> > PulseStoryBoardCompleted is setup in XAML (embedded as a resource in
> the
> > assembly). This exception kills Silverlight - it cannot be caught at
> the
> > IronPython level.
> >
> > To illustrate this, try the following IronPython code:
> >
> > import clr
> > clr.AddReference("Silverlight.Samples.Controls, Version=1.0.0.0,
> > Culture=neutral, PublicKeyToken=null")
> > from Silverlight.Samples.Controls import Button
> >
> > b = Button()
> >
> >
> > Any suggestions as to a way round this ?
> >
> >
> > All the best,
> >
> >
> > Michael Foord
> > http://www.ironpython.info/
> >
> >
> > _______________________________________________
> > Users mailing list
> > Users at lists.ironpython.com
> > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> > _______________________________________________
> > Users mailing list
> > Users at lists.ironpython.com
> > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> >
> >
> >
> >
> >
>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com



More information about the Ironpython-users mailing list