如何在xaml中将字符串转换为Uri?

时间:2016-02-18 09:06:05

标签: c# wpf xaml

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:sys="clr-namespace:System;assembly=mscorlib"
             mc:Ignorable="d" 
             Width="1024" Height="1280">
    <Grid Background="Black">
        <Image MaxWidth="500" MaxHeight="500" Source="{DynamicResource H_ThankYou_Image}" HorizontalAlignment="Center" VerticalAlignment="Center"/>  
    </Grid>
  <UserControl.Resources>
    <BitmapImage x:Key="H_ThankYou_Image" UriSource="{DynamicResource H_ThankYou_ImagePath}"/>
    <sys:String x:Key="H_ThankYou_ImagePath">"../../../../Graphics/Icon_Email.png"</sys:String>
  </UserControl.Resources>
</UserControl>

它说System.String类型的对象不能应用于需要System.Uri类型的属性。

当我尝试这样的事情时:

<sys:Uri x:Key="H_ThankYou_ImagePath">"../../../../Graphics/Icon_Email.png"</sys:Uri>

它的名字是&#34; uri&#34;在System命名空间中不存在??

EDIT1:

我尝试使用解决方案@Clemens建议: 它适用于第一次运行(Icon_Email.png),但是当我尝试动态更改值时,如下所示: userControl.Resources["H_ThankYou_ImagePath"] = "../../../../Graphics/Icon_Email2.png" 发生以下错误:

Cannot convert '<null>' from type '<null>' to type
'System.Windows.Media.ImageSource' for 'en-US' culture with default 
conversions; consider using Converter property of Binding. 
NotSupportedException:'System.NotSupportedException: ImageSourceConverter cannot convert from (null).

3 个答案:

答案 0 :(得分:4)

这个丑陋的黑客对我有用:

<Image DataContext="{DynamicResource H_ThankYou_ImagePath}" Source="{Binding}"/>

答案 1 :(得分:2)

根据AnjumSKhan的回答建立:

定义命名空间:

xmlns:sys="clr-namespace:System;assembly=System"

定义您的URI:

<sys:Uri>pack://application:,,,/YourAssemblyNameHere;component/Path/To/Image.jpg</sys:Uri>

所以问题是你引用了错误的程序集。只需将您的命名空间从mscorlib更改为System,就可以了。

答案 2 :(得分:0)

示例:

假设Penguins.jpg文件存在于根文件夹中。

命名空间映射

    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    xmlns:sys1="clr-namespace:System;assembly=System"

资源声明

    <sys1:UriBuilder x:Key="UKey">
        <sys1:UriBuilder.Host>
            <x:Static Member="sys:String.Empty" />
        </sys1:UriBuilder.Host>
        <sys1:UriBuilder.Scheme>
            <x:Static Member="sys:String.Empty" />
        </sys1:UriBuilder.Scheme>
        <sys1:UriBuilder.Path>
            pack://application:,,,/Penguins.jpg
        </sys1:UriBuilder.Path>
    </sys1:UriBuilder>

用法:

<Image Source="{Binding Uri, Source={StaticResource UKey}}"/>