首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在XAML属性数据库期间,可以为超链接提供StringFormat NavigateUri属性吗?

在XAML属性数据库期间,可以为超链接提供StringFormat NavigateUri属性吗?
EN

Stack Overflow用户
提问于 2010-08-26 20:14:36
回答 3查看 3.9K关注 0票数 1

是否有一种简单的方法可以将字符串转换或格式化为WPF数据绑定的一部分?

假设我想创建一个基于string标记的WPF超链接元素。

代码语言:javascript
复制
<Hyperlink NavigateUri="{Binding Tag}">
    <Run Text="{Binding Tag}" />
</Hyperlink>

但是,我需要首先为NavigateUri属性转换标记,使其成为真正的超链接或PackUri。

例如,如果我的标签是“民俗分类”,我希望创建一个字符串,如:http://www.example.com/tags/tagview?tag=folksonomy

实现这一目标的最佳方法是什么?XAML中有字符串操作函数吗?我要写转换器吗?我是否只需要构建一个完整的单独的ViewModel类来进行一些字符串格式化?

更新:超链接元素似乎发生了一些奇怪的事情。我可以获得“回答”中建议的StringFormat语法,用于普通TextBlock的Text属性,而不是超级链接的NavigateUri属性。

正如一个答案所指出的,这很可能是因为NavigateUri属性正式接受Uri,而不是字符串。显然,需要一个自定义转换器或ViewModel属性。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-26 20:38:19

您可以使用绑定的字符串格式功能:

代码语言:javascript
复制
<Hyperlink NavigateUri="{Binding Tag, StringFormat=http://www.example.com/tags/tagview?tag={0}}">
    <Run Text="{Binding Tag}" />
</Hyperlink>
票数 3
EN

Stack Overflow用户

发布于 2010-08-26 20:51:30

就像肯特说的,假设你在.NET 3.5 SP1上,你可以使用字符串格式(string格式化是作为SP1的一部分添加的)。这里的好例子:http://blogs.msdn.com/b/llobo/archive/2008/05/19/wpf-3-5-sp1-feature-stringformat.aspx

如果您不在.NET 3.5 SP1上,或者字符串格式方法变得过于混乱,您会想要一个IValueConverter http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx

票数 3
EN

Stack Overflow用户

发布于 2010-10-07 10:22:42

对于其他人偶然发现这条寻求解决方案的线程,我发现Foovanadil的建议IValueConverter对我很有用。

代码语言:javascript
复制
<TextBlock> 
    <Hyperlink Name="lnkGoogle" NavigateUri="{Binding Path=Alert.Query,Converter={View:UriConverter},ConverterParameter=google}" RequestNavigate="Hyperlink_RequestNavigate">
        Find news on Google
    </Hyperlink>
</TextBlock>

在我的代码背后使用转换器类:

代码语言:javascript
复制
public class UriConverter : MarkupExtension, IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string address = string.Empty;
            switch ((string)parameter)
            {
                case "google":
                    address = "http://www.google.co.uk/news?q=" + value;
                    break;                    
            }

            Uri path = new Uri(@address);
            return path;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new System.NotImplementedException();
        }

        public override object ProvideValue(System.IServiceProvider serviceProvider)
        {
            return this;
        }
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3579127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档