मैं 012,338,931 के लिए एक अद्यतन हैसमाधान। यह संसाधनों के लिए समान संसाधन शब्दकोश और एप्लिकेशन के भीतर कहीं भी संसाधनों के लिए काम करता है।
public class Alias : MarkupExtension
{
public string ResourceKey { get; set; }
public Alias()
{
}
public Alias(string resourceKey)
{
ResourceKey = resourceKey;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return _ProvideLocalValue(serviceProvider) ?? _ProvideApplicationValue();
}
private object _ProvideLocalValue(IServiceProvider serviceProvider)
{
var rootObjectProvider = (IRootObjectProvider)
serviceProvider.GetService(typeof(IRootObjectProvider));
if (rootObjectProvider == null) return null;
var dictionary = rootObjectProvider.RootObject as IDictionary;
if (dictionary == null) return null;
return dictionary.Contains(ResourceKey) ? dictionary[ResourceKey] : null;
}
private object _ProvideApplicationValue()
{
var value = Application.Current.TryFindResource(ResourceKey);
return value;
}
}
उपयोग ऊपर करने के लिए समान है, लेकिन कुंजी है, जहां इस्तेमाल नहीं किया StaticResource
मार्कअप विस्तार के रूप में Alias
उपयोग करने के लिए है। आवेदन संसाधन ढेर में कहीं न कहीं, संसाधनों को परिभाषित ...
<Application x:Class="WPF.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib"
xmlns:wpf="clr-namespace:WPF"
StartupUri="MainWindow.xaml">
<Application.Resources>
<system:String x:Key="Text">Display some text.</system:String>
<system:String x:Key="Other">4</system:String>
<wpf:Alias x:Key="Alias" ResourceKey="Text"/>
<wpf:Alias x:Key="Second" ResourceKey="Other"/>
</Application.Resources>
</Application>
और भी आप उपनाम संदर्भित कर रहे हैं ...
<Window x:Class="WPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wpf="clr-namespace:WPF"
Title="MainWindow" Height="150" Width="300">
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Text="{wpf:Alias Alias}"/>
<TextBlock Text="{wpf:Alias Second}"/>
</StackPanel>
</Window>
मेरे समाधान तार संदर्भित की आवश्यकता है, लेकिन यह किसी भी वस्तु के लिए काम करता है आप उपनाम करना चाहते हैं।
इस के लिए एकमात्र सीमा यह है कि यदि आप एक ही संसाधन शब्दकोश के भीतर उपयोग किए जाते हैं तो आप मूल और उपनाम दोनों का संदर्भ नहीं दे सकते हैं, क्योंकि वे एक-दूसरे को ओवरराइड करेंगे। मुझे लगता है कि यह कई प्रकार के शब्दकोशों पर लागू होता है जो आप एप्लिकेशन स्कोप पर विलय करते हैं। –
प्रश्न के तरीके के आधार पर निर्णय लेते हुए, वह मूल - केवल उसके उपनाम का संदर्भ नहीं लेना चाहता। मूल का संदर्भ उपनाम बनाने के उद्देश्य को हरा देगा। –
यह काम करता है। धन्यवाद! – Inferis