[IronPython] StaticResources + DLR + Silverlight

Dan Eloff dan.eloff at gmail.com
Sun May 11 16:38:05 CEST 2008


Ok, I think I have discovered an answer to this one. I haven't tested
it because I no longer use xaml files for anything but resources, but
it *should* work. Make a xaml file for just application level
resources, it should simply consist of a <ResourceDictionary>. Use
XamlReader.Load() to read it, now you have a dictionary of your global
styles and things. Programmatically merge that dictionary into the
Application.Current.Resources dictionary. If that works, you should be
able to use {StaticResource } to refer to your resources from
anywhere.

But bottom line is XAML cannot use Python objects and controls, so for
anything but the very simple, it soon becomes a liability. I've made a
module that simplifies the process of creating controls in Python
(which I hope to place in the IronPython cookbook soon.)

Here's an example:

x.Canvas(Width=400, Height=400)(
    x.Rectangle(Width=200, Height=200, Canvas_Top=100, Canvas_Left=100,

Fill=x.VerticalGradient([(x.Colors.DarkTurquoise, 0),
(x.Color('#4169e1'), 1)])
)

It's about half the size of the equivalent xaml, but no static error
checking, and very little in the way of auto completion and
intellisense, so I consider it about a wash. The advantage is that you
can now use Python controls and objects, and you can use anything
python has to offer, like loops, closures, or conditionals, when
constructing your interface.

-Dan

On Tue, May 6, 2008 at 2:04 AM, Jimmy Schementi
<Jimmy.Schementi at microsoft.com> wrote:
> Dan,
>
> It's a very good question, and I'm a little embarrassed not to have a solution for you. Give me some time to poke around and find the best way to do this.
>
> ~js
>
>> -----Original Message-----
>> From: users-bounces at lists.ironpython.com [mailto:users-
>> bounces at lists.ironpython.com] On Behalf Of Dan Eloff
>> Sent: Monday, May 05, 2008 6:44 AM
>> To: Discussion of IronPython
>> Subject: [IronPython] StaticResources + DLR + Silverlight
>>
>> I notice if you use C#/VB, you have <Application> in your main xaml
>> file. In there you can place resources that can be used from anywhere
>> in your other xaml files. Using the {StaticResource foo}  markup
>> extension.
>>
>> If you are using a dynamic language, there is no <DynamicApplication>
>> equivalent (please correct me if I'm wrong), most examples I've seen
>> use <UserControl>.
>>
>> The trouble is placing your resources in <UserControl.Resources> makes
>> them off limit to {StaticResource foo} in any other xaml files (again
>> please correct me if I'm wrong)
>>
>> So I find myself in a nightmare of duplicating resources across files
>> and setting styles in code from
>> Application.Current.RootVisual.Resources['foo'], neither of which is
>> pleasant. Are there really no better alternatives?
>>
>> -Dan
>> _______________________________________________
>> 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