图像源属性 - 内部DataTemplate和UserControl.Resources - 来自不同程序集的图像

时间:2011-10-04 09:20:23

标签: wpf xaml

如果我不在DataTemplate中,使用Image Source属性就可以了。 否则他找不到另一个名为“Images”的集合中的图片。

XAML,有效。我可以通过“图像”组件看到图像:

<UserControl x:Class="Views.ViewUserInfo"
             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" 
             mc:Ignorable="d"              
             d:DesignHeight="300" d:DesignWidth="600">

    <StackPanel Orientation="Horizontal">
        <StackPanel Orientation="Horizontal" Margin="0,5,0,5">
            <TextBlock Text="Authorized: "/>
            <TextBlock Text="{Binding Path=IsAuthorized, Mode=OneWay}" VerticalAlignment="Center"/>
            <Image Width="16" Height="16" Source="/Images;Component/Img16/Ok.png" />
         </StackPanel>
    </StackPanel>
</UserControl>

不起作用:

<UserControl x:Class="Views.ViewUserInfo"
             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" 
             mc:Ignorable="d"              
             d:DesignHeight="300" d:DesignWidth="600">

    <UserControl.Resources>
        <DataTemplate DataType="{x:Type System:Boolean}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="DataTemplate has been found " />
                <Image Width="16" Height="16" Source="/Images;Component/Img16/Ok.png" />
            </StackPanel>
            <DataTemplate.Resources>
                <!--simplyfied, Triggers removed...--->
            </DataTemplate.Resources>
        </DataTemplate>
    </UserControl.Resources>

    <StackPanel Orientation="Horizontal">
        <StackPanel Orientation="Horizontal" Margin="0,5,0,5">
            <TextBlock Text="Authorized: "/>
            <ContentPresenter Content="{Binding Path=IsAuthorized, Mode=OneWay}" VerticalAlignment="Center"/>
            <!--IsAuthorized.GetType() = typeof(System.Boolean)-->
         </StackPanel>
    </StackPanel>
</UserControl>

他实际上在DataTemplate中,因为他向我展示了文本“已找到DataTemplate”,但我看不到任何图片.. 问题是什么?

2 个答案:

答案 0 :(得分:0)

你说你看到了文本框,怎么可能,你的模板是空的,你的StackPanel只是你的DataTemplate中的一个资源。请尝试删除<DataTemplate.Resources></DataTemplate.Resources>行,或者添加<!--simplyfied, Triggers removed...--->

答案 1 :(得分:0)

不要使用ContentPresenter。使用的ContentControl。

   <ContentControl Content="{Binding Path=IsAuthorized, Mode=OneWay}" 
                     VerticalAlignment="Center"/>