SilverLight 3/4 中的附加依赖属性





5.00/5 (5投票s)
解决 Blend 3 和 Blend 4 RC 在处理附加依赖属性时遇到的限制的一个技巧。
在帮助 Alan Beasley 处理他文章 Picture Frame[^] 的“开发者支持”请求时,我在 Silverlight 3 和 4 以及 Blend 4 RC 中发现了一些值得一提的事情。Silverlight 3SL 3 在解析 Xaml 方面存在一个错误,导致你几乎无法获得真实的来源信息(参见 这里[^])。可以通过使用根元素处的 xmlns(带有程序集)来“部分”克服这个问题,例如
<ControlTemplate TargetType="ContentControl">
<Grid x:Name="LayoutRoot" xmlns:y="clr-namespace:MyNamespace; assembly=MyAssembly">
<Path Fill="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(y:MyClass.VerticalGradient)}" />
</Grid>
</ControlTemplate>
对于那些使用上述方法的人来说,正如 Alan 所告知,这仍然会导致 Blend 设计器出现一些问题。但除此之外,它仍然可以正常编译和运行。不过,我发现另一种利用 XamlReader 的方法。我个人无法保证这种方法的有效性,因为我没有尝试过,但可以在 这里[^] 找到 thejvk 的帖子。Silverlight 4SL 4 确实解决了上述错误,允许你忽略将“xmlns”元素应用于控件模板的根目录。因此,代码片段现在看起来像这样<ControlTemplate TargetType="ContentControl">
<Grid x:Name="LayoutRoot"
<Path Fill="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(y:MyClass.VerticalGradient)}" />
</Grid>
</ControlTemplate>
Blend 4 RC (4.0.20421.0)在使用 Blend 4 RC (4.0.20421.0) 时,我发现了一个有趣的错误。当你打开一个不包含定义依赖项的类的解决方案时,Blend 在你编译并重新打开解决方案之前不会显示依赖项属性。重新打开后,Blend 将解释对依赖项属性所做的任何更改,并在更改构建后立即更新 UI。附加提示为了让你的 UI 设计师的生活更轻松,你希望将 BrowsableAttribute[^]、CategoryAttribute[^] 和 DescriptionAttribute[^] 属性应用于你的依赖属性的 GetXXX 方法。Visual Studio 和 Blend 在提取有关你的依赖属性的信息时会查看此方法(参见 此处[^] 的说明)。