【问题标题】:WPF locks images when referenced through a resource dictionaryWPF 在通过资源字典引用时锁定图像
【发布时间】:2018-05-31 08:02:56
【问题描述】:

当我加载资源字典时,它会将所有元素加载到画布中并正确显示所有元素。当我想删除一个元素时会出现问题。如果我删除元素,我还想删除与该元素关联的图像。但问题是windows不允许我删除它,因为它被资源字典引用了。

这是我用来加载文件的代码:

ResourceDictionary dict = new ResourceDictionary();
dict.Source = new Uri(xamlFilePath, UriKind.RelativeOrAbsolute);

this.Resources.MergedDictionaries.Clear();
this.Resources.MergedDictionaries.Add(dict);

this.UpdateLayout();

在调用 dict.Source 时发生锁定。

图像存储在 XAML 文件附近的文件夹中。这是在 XAML 文件中存储的内容:

<Style x:Key="objectPhoto" TargetType="{x:Type Border}">
    <Setter Property="Visibility" Value="Visible" />
    <Setter Property="Canvas.Top" Value="116" />
    <Setter Property="Canvas.Left" Value="654" />
    <Setter Property="BorderBrush" Value="#FF000000" />
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="Height" Value="347" />
    <Setter Property="Width" Value="347" />
    <Setter Property="Background" Value="Transparent" />
    <Style.Resources>
        <Style TargetType="Image">
            <Setter Property="Source" Value="Card Design Images\objectPhoto.png" />
            <Setter Property="Stretch" Value="Fill" />
        </Style>
    </Style.Resources>
</Style>

【问题讨论】:

  • 哪张图片?您发布的代码中没有任何内容。
  • 你好。也许您应该考虑使用 ResourceDictionary 以外的其他东西。如果你想加载和删除东西,数据库或类似的东西会更合适。
  • @Bob 我认为做这样的事情会更好,或者看到好像我已经具有输出 XAML 的导出功能,我可以遍历文件和样式中的所有元素他们那样,

标签: c# wpf resourcedictionary


【解决方案1】:

实际的问题不是 ResourceDictionary,而是从 Source 属性的 Setter 中的 Value 字符串隐式创建的 BitmapFrame。除非您没有明确指定 BitmapCacheOption,否则 WPF 会保持其源文件处于打开状态。

您可以像这样创建 Setter 的值,并设置 BitmapCacheOption.OnLoad:

<Style TargetType="Image">
    <Setter Property="Source">
        <Setter.Value>
            <BitmapImage CacheOption="OnLoad"
                         UriSource="Card Design Images\objectPhoto.png"/>
        </Setter.Value>
    </Setter>
</Style>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多