Je viens d'installer IronPython 2.7 avec support VS, et j'essaie de créer une application WPF prototype simple. Quelque chose est cassé, probablement dans mon installation, et je n'arrive pas à comprendre comment le diagnostiquer. Je ne peux pas obtenir le plus simple des liaisons pour travailler; ils échouent avec une exception qui semble vraiment, vraiment fausse.Pourquoi IronPython 2.7 lève une exception lorsque je crée des liaisons WPF à partir de XAML?
créer un projet d'application WPF, et mettre XAML comme ça dans mon dossier WpfApplication1.xaml
:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WpfApplication1">
<Grid>
<TextBox x:Name="MyTextBox" Text="{Binding RelativeSource={RelativeSource Self}, Mode=OneWay, Path=ActualWidth}"/>
</Grid>
</Window>
Quand je cours, je reçois cette exception:
System.Xaml.XamlObjectWriterException was unhandled by user code
Message=Provide value on 'System.Windows.Data.Binding' threw an exception.
InnerException: System.Windows.Markup.XamlParseException
Message=A 'Binding' cannot be set on the 'Text' property of type 'TextBox'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.
Hmm, dernière fois que je regardé, Text
est une propriété de dépendance. Et en effet, si je crée la liaison dans le code, cela fonctionne:
import clr
clr.AddReference('PresentationFramework')
from System.Windows import Application, Window, Controls, Data, PropertyPath
class MyWindow(Window):
def __init__(self):
clr.LoadComponent('WpfApplication1.xaml', self)
t = self.FindName("MyTextBox")
b = Data.Binding()
b.RelativeSource = Data.RelativeSource.Self
b.Mode = Data.BindingMode.OneWay
b.Path=PropertyPath("ActualWidth")
t.SetBinding(Controls.TextBox.TextProperty, b)
Je suis assez déconcerté à ce stade. Il est difficile pour moi d'imaginer tout ce qui pourrait causer ce problème qui ne gâcherait pas la création complète d'objets WPF à partir de XAML. Y at-il quelque chose d'évident que j'ai manqué?
Wow, vraiment? Je n'ai vu aucune mention de cela dans le tracker. Il est un peu déconcertant de voir qu'ils feraient disparaître toute version d'IronPython avec un bug qui empêcherait WPF de fonctionner. –
@Robert - IronPython 2.7 est actuellement en version alpha 1 donc je pense qu'il est acceptable d'avoir des bugs là :-) –
Ce n'est pas "bugs". IronPython ne prend pas en charge un cas d'utilisation fondamental. Vraiment, vous ne pouvez pas créer d'applications WPF pour le moment. Je suis surpris que cela ne retarde pas une sortie, et je suis plus surpris qu'il ne soit pas documenté. Quand je lance un logiciel alpha qui a quelque chose de si gros, je dis aux gens que c'est cassé. –