StaticResource Binding不能用作ImageSource

时间:2016-02-01 13:04:41

标签: c# wpf

如果我使用此代码:

<btn:Button ButtonImage="{Binding Path=BtnImage, FallbackValue=../Images/Search.png}"/>

如果未设置BtnImage,我的Button会有一个默认图像。当我尝试将其更改为:

    <UserControl.Resources>
        <ImageSource x:Key="DefaultImage">
            ../Images/Search.png
        </ImageSource>
    </UserControl.Resources>
...

<btn:Button ButtonImage="{Binding Path=BtnImage, FallbackValue={StaticResource DefaultImage}}"/>

我的默认图片未显示。我想了解为什么以及如何解决这个问题,因为我是这种StaticResource方法的粉丝。

编辑:

我用过的按钮是假的:

<UserControl x:Class="WPF_Controls.Controls.Button"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Name="Btn">
    <Button DataContext="{Binding ElementName=Btn}"
            Command="{Binding Path=ButtonCommand}">
        <Image Source="{Binding Path=ButtonImage}" />
    </Button>
</UserControl>

解决方案: 如果我使用:

<UserControl.Resources>
    <system:String x:Key="DefaultImage">pack://application:,,,/DK_WPF_Controls;component/Images/Search.png</system:String>
</UserControl.Resources>

一切都按预期工作!

1 个答案:

答案 0 :(得分:1)

如果Visual Studio项目中有一个“Images”文件夹,其中包含“Search.png”文件,并且文件的Build Action设置为Resource,则以下内容应该有效:

<UserControl.Resources>
    <BitmapImage x:Key="DefaultImage" UriSource="/Images/Search.png"/>
</UserControl.Resources>

,其中

UriSource="/Images/Search.png"

是完整Resource File Pack URI的XAML快捷方式,即

UriSource="pack://application:,,,<assembly name>;component/Images/Search.png"

或者,您也可以使用从字符串到ImageSource的隐式转换,如

<ImageSource x:Key="DefaultImage">/Images/Search.png</ImageSource>