WP7绑定到本地变量

5

我有一个 UI 元素,我希望根据页面中的本地变量(实际上是模块中的变量,但我可以将其移动到页面)来设置其颜色。

在 WPF 中,我们可以通过将变量设置为属性并使用 FindAncestor 来将 UI 元素绑定到本地变量的父类:

WPF Binding to local variable

不幸的是,Silverlight 似乎不支持 FindAncestor 模式。

是否有任何可能的解决方案,或者我必须为这个变量创建一个自定义类的实例?

1个回答

7

我最近几周一直在Silverlight和WPF之间跳来跳去,因此以下想法可能行得通也可能不行。

你的页面是否设置了name属性?如果没有,请设置它(x:Name="MyPage")。

然后你可以这样做:

Fill="{Binding ElementName=MyPage, Path=MyProperty}"

尝试一下(这只是我脑海中的想法)。

+1,我也正想发布相同的答案。使用ElementName绑定通常是缺少FindAncestor的(较弱)解决方法。顺便说一句,FindAncestor绑定将在Silverlight 5中推出,希望它最终能够到达手机平台。 - Austin Lamb
尝试使用整数属性来保持简单。将页面命名为“MyPage”,然后在UI元素中放置: <RotateTransform Angle="{Binding ElementName=MyPage, Path=gDirection}" />。 在页面代码中,我有: Property gDirection As Integer = 45。这会在加载时引发异常。如果我用45替换绑定,它就可以正常工作,所以看起来绑定不起作用... - amb9800
只使用数字时它可以正常工作,但是当插入绑定时,它会出现XamlParseException:System.Windows.Markup.XamlParseException发生 Message=AG_E_PARSER_BAD_PROPERTY_VALUE [Line: 45 Position: 42] LineNumber=45 LinePosition=42 StackTrace: at MS.Internal.XcpImports.CheckHResult(UInt32 hr) at MS.Internal.XcpImports.UIElement_Measure(UIElement element, Size availableSize) at System.Windows.UIElement.Measure(Size availableSize) at Microsoft.Phone.Controls.Maps.MapLayer.MeasureOverride(Size availableSize) ... - amb9800
供参考,这是地图控件推针模板中的一个项目。 - amb9800
我能够使用这种方法来根据页面方向切换元素的可见性。但是,我必须在页面中实现System.ComponentModel.INotifyPropertyChanged接口,以便绑定可以捕获到更改。 - Daniel Ballinger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接