WPF图像显示在运行时但未显示在设计器中

8ljdwjyq  于 2023-05-19  发布在  其他
关注(0)|答案(1)|浏览(204)

我在WPF应用程序(.net 5.0)中有一个图像控件,它在运行时显示图像,没有问题,但在设计器中不显示
下面是XAML:

<Window>
    <Grid x:Name="MainGrid" 
        VerticalAlignment="Stretch" 
        HorizontalAlignment="Stretch" 
        SnapsToDevicePixels="True">

        <Grid.RowDefinitions>
            <RowDefinition x:Name="BannerArea" Height="192"/>
            <RowDefinition x:Name="MainArea" Height="2.5*"/>
        </Grid.RowDefinitions>

        <Border x:Name="BannerImageBorder" Grid.Row="0">
             <Image x:Name="BannerBottonLayerImage"
                Source="{DynamicResource BannerImageBackground}"
                HorizontalAlignment="Left"
                Width="1550"
                SnapsToDevicePixels="True"
                RenderOptions.BitmapScalingMode="HighQuality">
             </Image>
        </Border>
    </Grid>
</Window>

<Window.Resources>
    <BitmapImage x:Key="BannerImageBackground" UriSource="Resources\BannerImageBackground.png"/>
</Window.Resources>

我已经将“BannerImageBackground.png”的构建操作设置为“Resource”。
图像在运行时显示没有问题,而在设计器中消失。有趣的是,如果我更改XAML以强制语法错误,然后将其更改回来,则图像会重新出现在designer中,只有当我在VS中运行应用程序时才会再次消失
到目前为止我所尝试的:

  • 重命名图像的文件名和资源项名称,无效。
  • 将图像移动到另一个文件夹,没有用。
  • 将图像声明为边界“BannerImageBorder”的资源,并将源设置为静态资源,没有用。
  • 将映像的构建操作设置为“内容”,并将“复制到输出目录”设置为“始终复制”,都没有用。

我的项目的目录路径不包含任何特殊字符。
我在网上搜索了一下,这是我能找到的其他人发布的最接近的问题:.Net Core 3: Image disappear in Designer after run,在那个线程中,Visual Studio团队说这个bug已经在VS 2019 16.5 Preview 2中修复了,但我使用的是16.11.26,但这个问题仍然存在。
我不知道是我做错了什么,还是只是一个bug?它当然不会阻止任何东西,但只是超级烦人。
先谢谢你了。

ecr0jaav

ecr0jaav1#

更新:

我设法找到了一个可以接受的解决方法来解决我的问题,但我不确定它是否对您的问题有帮助。所有图像都存储在专用的ResourceDictionary文件中,然后通过App.xaml引用该文件,这使得设计人员可以显示StaticResource图像,而无需硬编码其路径。
我已经修改了下面的代码,使其成为一个可重复性最低的示例,并希望您可以使用新的解决方案来验证您的问题是否仍然存在。如果这不起作用,那么指定绝对路径而不是使用StaticResource或相对路径对您来说是否正确?

原文:

我还没有足够的声誉发表评论,但我相信我遇到了与您相同的问题,但配置明显不同。我无法看到的图像在设计师虽然在所有。我正在将Visual Studio 2022用于**.Net Framework 4.8**项目。
经过大量的研究,我只设法在设计器中显示图像时,图像源是一个URI或资源是在同一个文件中定义的资源是要使用的。以下三种解决方案都适用于运行时,但不适用于设计时的解决方案是我想要使用的解决方案。
不幸的是,无论我怎么努力,我也不能让它暂时显示出来。

更新代码:

<!-- Images.xaml -->
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <BitmapImage x:Key="ResourceImage" UriSource="/Image.png" />
</ResourceDictionary>
<!-- App.xaml -->
<Application x:Class="WpfApp1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="/Main.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/Images.xaml" />
            </ResourceDictionary.MergedDictionaries>
            
            <BitmapImage x:Key="AppImage" UriSource="/Image.png" />
        </ResourceDictionary>
    </Application.Resources>
</Application>
<!-- Main.xaml -->
<Window x:Class="WpfApp1.Main"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Images.xaml" />

            </ResourceDictionary.MergedDictionaries>
            <BitmapImage x:Key="MainImage" UriSource="/Image.png" />
        </ResourceDictionary>
    </Window.Resources>

    <Grid>
        <StackPanel>
            <!-- Not Displayed - "App.xaml" -->
            <Image Source="{StaticResource AppImage}" Width="100" Height="100" />
            
            <!-- Displayed - "Images.xaml" via "App.xaml" -->
            <Image Source="{StaticResource ResourceImage}" Width="100" Height="100" />

            <!-- Displayed - "ResourceDictionary" -->
            <Image Source="{StaticResource MainImage}" Width="100" Height="100" />

            <!-- Displayed - "/Image.png" -->
            <Image Source="/Image.png" Width="100" Height="100" />
        </StackPanel>
    </Grid>
</Window>

设计器输出:

相关问题