超链接按钮陷阱





0/5 (0投票)
超链接按钮陷阱
新的 Silverlight 2 HyperlinkButton 控制是 Silverlight 2 和 WPF 之间几乎没有完全匹配的少数控件之一,它的使用非常简单。 你为 NavigateUri 属性指定一个值,该值定义了链接将导航到的位置(顾名思义!),并为 TargetName 属性指定一个值,该值定义了导航的目标窗口或框架,例如 _blank
或 _self
。
以下代码示例演示了如何定义一个 HyperlinkButton,它显示“Titan Blog”,并将在新窗口中导航到此博客
<HyperlinkButton Content="Titan Blog"
NavigateUri="http://cloudstore.spaces.live.com"
TargetName="_blank" />
NavigateUri 属性的类型实际上是一个 Uri。 像 WPF 和 Silverlight 2 中的许多属性一样,你可以指定一个 string
而不是实际类型的实例,并且会使用转换器将源 string
转换为所需的类型(例如,Background="Red"
被转换为 SolidColorBrush
)。 这就是发生在使用 NavigateUri 属性中指定的 string
的情况。 以下代码示例演示了如何在代码中定义先前的 HyperlinkButton
HyperlinkButton targetLink = new HyperlinkButton();
targetLink.Content = "Titan Blog";
targetLink.NavigateUri = new Uri("http://cloudstore.spaces.live.com");
targetLink.TargetName = "_blank";
说重点,Derek! 重点是:当涉及到将数据绑定到 HyperlinkButton 控制时,你可能会尝试将 string
绑定到 NavigateUri 属性。 不要这样做! 虽然这不会导致应用程序灾难性地结束,但也不会使你的 HyperlinkButton 真正起作用。 解决此问题有两种潜在的方法。
- 将 Uri 值绑定到 NavigateUri 属性。 如果你可以控制正在绑定的底层数据模型,这很好,并且提供了最简单的解决方案。
- 创建一个可以转换
string
为 Uri 的自定义转换器。 虽然这是一个特别简单的转换器,但它会使你的 XAML 变得混乱,因为你需要在绑定中指定转换器。
这次我使用了解决方案 1,因为我可以访问我的数据模型并可以轻松地更改它,但将来,我可能会倾向于使用选项 2。