On Fri, Jul 25, 2014 at 12:45 AM, John Trinder <trinderj...@dsl.pipex.com> wrote:
> I'm new to FePy and after doing a fair bit of studying am embarking on > transcoding a C# project to FePy. I'm encountering a problem incorporating > a module that defines a subclass of Canvas and then trying to utilize this > custom canvas in the Xaml code. > > My skeleton files/modules and contents are as follows: > > > > *module1.py *import clr > clr.AddReference('PresentationFramework') > import System.Windows.Controls as swc > > class CustomCanvas(swc.Canvas): > def __init__(self): > pass > > *WpfApplication1.xaml* > > <Window > xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" > <http://schemas.microsoft.com/winfx/2006/xaml/presentation> > xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > <http://schemas.microsoft.com/winfx/2006/xaml> > *xmlns:local="clr-namespace:module1"* > Title="WpfApplication1" Height="300" Width="300"> > <Grid> > *<local:CustomCanvas HorizontalAlignment="Left" Height="100" > Margin="96,90,0,0" VerticalAlignment="Top" Width="100"/>* > </Grid> > </Window> > > *WpfApplication1.py* > > import wpf > > from System.Windows import Application, Window > > class MyWindow(Window): > def __init__(self): > wpf.LoadComponent(self, 'WpfApplication1.xaml') > > Application().Run(MyWindow()) > > > I've marked in bold where I have incorporated my module/namespace. > Intellisense says that on the *<local:CustomCanvas .../>* line, > CustomCanvas 'does not exist in the namespace *"clr-namespace:module1"'* > I'm guessing that it's not possible to do (yet) what I want to do - which > is pretty basic. > Thanks in advance btw for any advice and tips. > I'm no WPF expert, but I'm guessing the issue is that IronPython doesn't statically build a "real" .NET class, and the namespace and class name aren't guaranteed to be the same on each run.* It is possible to manipulate the type generation using __clrtype__[1] but it's not well documented. That allows you to control the exact type name that is used so that other code can look it up using reflection. I have grand plans for how this will in IronPython, where classes can take keyword args and there are function attributes to set types: class CustomCanvas(swc.Canvas, namespace="Foo"): pass Then you could use *xmlns:local="clr-namespace:Foo" *and it would work as expected. That's still a ways out, though - I'd have to implement support for those keyword args first. :) - Jeff [1] http://ironpython.net/documentation/dotnet/dotnet.html#clrtype * In your case, the backing type name would be something like "IronPython.Types.System.Windows.Controls.Canvas$1" - and it's the "$1" that can change on each run.
_______________________________________________ Ironpython-users mailing list Ironpython-users@python.org https://mail.python.org/mailman/listinfo/ironpython-users