当我从XAML创建WPF绑定时,为什么IronPython 2.7会引发异常?
我刚刚安装了支持VS的IronPython2.7,并尝试创建一个简单的WPF原型应用程序。有些东西坏了,可能是在我的安装中,我不知道如何诊断它。我无法使用最简单的绑定;他们失败了,但有一个例外,似乎真的,真的错了 我创建了一个WPF应用程序项目,并像这样将XAML放在我的当我从XAML创建WPF绑定时,为什么IronPython 2.7会引发异常?,wpf,xaml,binding,ironpython,Wpf,Xaml,Binding,Ironpython,我刚刚安装了支持VS的IronPython2.7,并尝试创建一个简单的WPF原型应用程序。有些东西坏了,可能是在我的安装中,我不知道如何诊断它。我无法使用最简单的绑定;他们失败了,但有一个例外,似乎真的,真的错了 我创建了一个WPF应用程序项目,并像这样将XAML放在我的WpfApplication1.XAML文件中: <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
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>
嗯,上次我看,Text
是一个依赖属性。事实上,如果我在代码中创建绑定,它会起作用:
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)
在这一点上我很困惑。对于我来说,很难想象有什么会导致这个问题,而不完全从XAML创建WPF对象。是否有明显的遗漏?这是新WPF支持中的一个bug。它在电流源中是固定的,因此它将在Beta 1版本中固定。根本原因是需要使用“模式上下文”来获取我们以前没有使用过的完整WPF语义。它还移动到一个新的“wpf”模块,而不是clr模块。哇,真的吗?我在追踪器里没看到有人提到它。有点令人不安的是,他们推出了任何版本的IronPython,其中有一个使WPF绑定无法工作的bug。@Robert-IronPython 2.7目前是alpha 1版本,所以我认为有bug是可以接受的:-)这不是“bug”。这是IronPython不支持基本用例。实际上,现在基本上不能用它构建WPF应用程序。我很惊讶这不会阻止发布,更奇怪的是它没有文档记录。当我发布的alpha软件有这么大的问题时,我告诉人们它已经坏了。实际上,我们在发布时并不知道这个问题,这就是为什么在任何发布说明中都没有提到它的原因。直到后来我们在内部发现它,它才被修复。2.7是一个alpha版本,因此它是用来获取早期反馈的,而不是用来表示稳定且经过良好测试的内容。
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)