65.9K
CodeProject 正在变化。 阅读更多。
Home

超链接按钮陷阱

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2009 年 4 月 1 日

CC (Attr 3U)

2分钟阅读

viewsIcon

18198

超链接按钮陷阱

新的 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 真正起作用。 解决此问题有两种潜在的方法。

  1. Uri 值绑定到 NavigateUri 属性。 如果你可以控制正在绑定的底层数据模型,这很好,并且提供了最简单的解决方案。
  2. 创建一个可以转换 stringUri 的自定义转换器。 虽然这是一个特别简单的转换器,但它会使你的 XAML 变得混乱,因为你需要在绑定中指定转换器。

这次我使用了解决方案 1,因为我可以访问我的数据模型并可以轻松地更改它,但将来,我可能会倾向于使用选项 2。

© . All rights reserved.