इस परिदृश्य की जाँच करें (दूसरों के रूप में अच्छी तरह से लागू हो सकता है) [आप परियोजना सिर्फ सही फ़ाइल पर कोड को पेस्ट कॉपी यहाँ बना सकते हैं]:विजुअल स्टूडियो डब्ल्यूपीएफ डिजाइनर में बग?
एक - मूल सामान (Resources.xaml) के साथ एक ResourceDictionary बनाएँ:
-<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush Color="Red" x:Key="Test" />
<Style TargetType="{x:Type GroupBox}" x:Key="Test2" >
<Setter Property="Background" Value="Blue" />
</Style>
<Style TargetType="{x:Type TextBlock}" >
<Setter Property="Foreground" Value="Green" />
</Style>
</ResourceDictionary>
ख एक उपयोगकर्ता नियंत्रण आधार जहाँ दूसरों बुनियादी संसाधनों (UserControlBase.cs) युक्त प्राप्त कर लेंगे बनाएँ:
using System.Windows.Controls;
using System;
using System.Windows;
namespace ResourceTest
{
public class UserControlBase : UserControl
{
public UserControlBase()
{
this.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("ResourceTest;component/Resources.xaml", UriKind.RelativeOrAbsolute) });
}
}
}
ग - एक UserControl आधार से इनहेरिट (UserControl1.xaml) बनाएँ:
<ResourceTest:UserControlBase x:Class="ResourceTest.UserControl1"
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"
xmlns:ResourceTest="clr-namespace:ResourceTest"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="300" >
<Grid>
<GroupBox BorderBrush="{StaticResource Test}" Margin="3" Header="Test" Style="{DynamicResource Test2}" >
<TextBlock Text="TESTTEST" />
</GroupBox>
</Grid>
</ResourceTest:UserControlBase>
परिणाम: StaticResources का समाधान नहीं कर रहे हैं (और टेस्ट BorderBrush लोड नहीं है)। डायनेमिक स्रोतों का समाधान किया जाता है (पृष्ठभूमि नीली है) लेकिन डिजाइनर कहता है कि यह संसाधन को वैसे भी नहीं ढूंढ सकता है (पहली बार ठीक काम करता है लेकिन जब आप डिज़ाइनर को खोलते/बंद करते हैं तो संसाधन को हल नहीं किया जा सकता है)। टेक्स्टब्लॉक शैली जैसे गैर नामित संसाधन ठीक काम करते हैं।
क्या यह एक डिज़ाइनर बग है या क्या मैं कुछ गलत कर रहा हूं? संसाधनों को एक परिदृश्य में गतिशील घोषित करना ठीक है जहां संसाधन कभी नहीं बदलेगा?
अग्रिम धन्यवाद।
संसाधनों को गतिशील, बस उतना ही कुशल नहीं घोषित करना ठीक है। यदि आप केवल इस संसाधन डिक्शनरी का उपयोग कर रहे हैं, तो क्या आपने बेस क्लास के लिए एक्सएएमएल फ्रंट में 'UserControl.Resources' में इसे जोड़ने का प्रयास किया है, यह देखने के लिए कि क्या यह अलग-अलग व्यवहार करता है? –
@WillEddins: मेरे असली एप्लिकेशन में संसाधन बेस उपयोगकर्ता नियंत्रण पर सेट होते हैं, इसलिए प्रत्येक नियंत्रण में डब्ल्यूपीएफ डिजाइनर पर इसे देखने के लिए आवश्यक संसाधन होते हैं (अन्यथा शैलियों को केवल रनटाइम पर लागू किया जाता है और हम उचित यूआई डिज़ाइन नहीं कर सकते हैं जब तक कि शुरू नहीं हो जाता प्रत्येक परिवर्तन पर ऐप: एस)। –