-1

在合并字典中,我有一个名为“xy”的画笔,但用户可能有一个没有该键的主题,所以我试图删除该键,以便为它分配另一个画笔。问题是在以下情况下它会找到它,将其删除,然后继续查找密钥:

if (Application.Current.Resources.Contains("xy"))
    Application.Current.Resources.Remove("xy");  //triggered
if (Application.Current.Resources.Contains("xy"))
    Application.Current.Resources.Remove("xy");  //also triggered
if (Application.Current.Resources.Contains("xy") == false)
   AssignNewKey(); //never reached

编辑:“xy”画笔被添加为 MergedDictionary。放置断点并查看结果Application.Current.Resources甚至没有列出 xy 画笔,但包含将是真的

4

1 回答 1

0

您可以找到ResourceDictionary其中包含特定资源的资源MergedDictionaries并删除该资源。假设您创建了 App.xaml,如下所示。

<Application x:Class="WpfApp.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary>
                    <SolidColorBrush x:Key="xy" Color="Red"/>
                </ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

然后您可以删除名为“xy”的资源。

foreach (ResourceDictionary r in Application.Current.Resources.MergedDictionaries)
{
    if (r.Contains("xy"))
    {
        r.Remove("xy");
        break;
    }
}

顺便说一句,我想知道你是否真的需要删除它。只是覆盖它可能就足够了。

于 2022-02-28T21:47:42.607 回答