जब मैं संसाधन शब्दकोश में लोड करता हूं, तो यह सभी तत्वों को कैनवास में ठीक से लोड करता है और उन सभी को ठीक से दिखाता है। समस्या तब होती है जब मैं किसी तत्व को हटाना चाहता हूं। अगर मैं तत्व को हटाता हूं, तो मैं उस तत्व से जुड़ी छवि को भी हटाना चाहता हूं। लेकिन समस्या यह है कि विंडोज़ मुझे इसे हटाने नहीं देगी क्योंकि इसे संसाधन शब्दकोश द्वारा संदर्भित किया गया था।

यह वह कोड है जिसका उपयोग मैं फ़ाइल लोड करने के लिए करता हूं:

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 फ़ाइल के पास एक फ़ोल्डर में संग्रहीत किया जाता है। एक्सएएमएल फ़ाइल में यह संग्रहीत है:

<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>
0
MosesTheHoly 31 मई 2018, 11:02

1 उत्तर

सबसे बढ़िया उत्तर

वास्तविक समस्या रिसोर्स डिक्शनरी नहीं है, बल्कि बिटमैपफ्रेम है जो स्रोत संपत्ति के लिए सेटर में वैल्यू स्ट्रिंग से अंतर्निहित रूप से बनाया गया है। जब तक आप स्पष्ट रूप से बिटमैप कैशऑप्शन निर्दिष्ट नहीं करते हैं, डब्ल्यूपीएफ अपनी स्रोत फ़ाइल को खुला रखता है।

आप इस तरह सेटर का मान बना सकते हैं, और BitmapCacheOption.OnLoad सेट कर सकते हैं:

<Style TargetType="Image">
    <Setter Property="Source">
        <Setter.Value>
            <BitmapImage CacheOption="OnLoad"
                         UriSource="Card Design Images\objectPhoto.png"/>
        </Setter.Value>
    </Setter>
</Style>
1
Clemens 31 मई 2018, 11:43