首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从<Hyperlink> NavigateUri属性填充<MultiBinding>?

如何从<Hyperlink> NavigateUri属性填充<MultiBinding>?
EN

Stack Overflow用户
提问于 2012-01-25 17:14:10
回答 1查看 1.7K关注 0票数 2

我有这个密码

代码语言:javascript
复制
<Hyperlink NavigateUri="">
  <Run>
     <Run.Text>
         <MultiBinding StringFormat="{}{0}{1}{2}">
              <Binding Path="Text" ElementName="tbxHostData" />
              <Binding Path="Text" ElementName="tbxWebSiteDataName" />
              <Binding Path="Text" ElementName="tbxDataServicesName" />
          </MultiBinding>
     </Run.Text>
  </Run>
</Hyperlink>

如何使用<MultiBinding>填充NavigateUri=""

有可能吗?

多亏了@ThomasLevesque

解决办法:

代码语言:javascript
复制
<Window.Resources>
  <c:StringToUriConverter x:Key="stringToUriConverter"/>
</Window.Resources>

<Hyperlink.NavigateUri>
        <MultiBinding ConverterParameter="" Converter="{StaticResource uriConverter}">
            <Binding Path="Text" ElementName="tbxHostData" />
            <Binding Path="Text" ElementName="tbxWebSiteDataName" />
            <Binding Path="Text" ElementName="tbxDataServicesName" />
        </MultiBinding>
</Hyperlink.NavigateUri>

C#

代码语言:javascript
复制
[ValueConversion(typeof(String), typeof(Uri))]
public class UriConverter : IMultiValueConverter
{
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            Uri result;
            string input = String.Join(string.Empty, values);

            Uri.TryCreate(input,  UriKind.RelativeOrAbsolute, out result);
            return result;
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-25 17:16:48

这是可能的,但不能使用StringFormat (它只对String类型的属性起作用)。你需要用转换器代替。

代码语言:javascript
复制
<Hyperlink.NavigateUri>
    <MultiBinding Converter="{StaticResource uriConverter}">
        <Binding Path="Text" ElementName="tbxHostData" />
        <Binding Path="Text" ElementName="tbxWebSiteDataName" />
        <Binding Path="Text" ElementName="tbxDataServicesName" />
    </MultiBinding>
</Hyperlink.NavigateUri>
代码语言:javascript
复制
public class UriConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        string uriString = String.Join(string.Empty, values);
        return new Uri(uriString);
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9006957

复制
相关文章

相似问题

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