2011-03-25 12 views
8

वर्तमान में मैं यह इतना कर रहा हूँ:आवेदन संसाधन के लिए विंडो शीर्षक बाध्यकारी डाटा

public MainWindow() 
    { 
     InitializeComponent(); 
     Title = Properties.Resources.WindowName; 
    } 

कैसे WPF बाइंडिंग के माध्यम से भी ऐसा ही करने के लिए?

संपादित करें: यह अभी भी एक्सएएमएल में काम नहीं करता है।
पर्यावरण: VS2010, .NET 4.0, विंडोज 7
प्रजनन कदम:
कोड के साथ वर्ग पुस्तकालय ClassLibrary1 बनाएँ:

namespace ClassLibrary1 
{ 
    static public class Class1 
    { 
     static public string Something 
     { 
      get { return "something"; } 
     } 
    } 
} 

VS2010 .NET 4.0 में WPF खिड़कियों आवेदन बनाएँ।
संपादित करें मुख्य विंडो के XAML:

<Window x:Class="ahtranslator.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
    xmlns:ClassLibrary1="clr-namespace:ClassLibrary1;assembly=ClassLibrary1" 
    Title="{Binding Source={x:Static ClassLibrary1:Class1}, Path=Something}" 
    Height="350" Width="525" Icon="/ahtranslator;component/Icon1.ico" WindowStyle="SingleBorderWindow" ShowInTaskbar="False" DataContext="{Binding}"> 

...

संकलन त्रुटि संदेश:
MainWindow.xaml (7130): त्रुटि MC3029: 'ClassLibrary1: Class1' सदस्य मान्य नहीं है क्योंकि यह करता है नहीं है योग्यता प्रकार का नाम नहीं है।

इसके अलावा मुझे यह विषय My.Resources in WPF XAML? मिला। और ऐसा लगता है कि सभी को काम करना चाहिए लेकिन ऐसा नहीं है।

माइक्रोसॉफ्ट इस त्रुटि संदेश के लिए विवरण नहीं देता है। सहायता मंच http://social.msdn.microsoft.com/Forums/en/wpf/thread/4fe7d58d-785f-434c-bef3-31bd9e400691 में केवल एक और विषय, जो या तो मदद नहीं करता है।

+0

इस मामले में पथ के अंदर 'एक्स होना चाहिए: Static' के रूप में संपत्ति स्थिर है, यानी' {बाइंडिंग स्रोत = {x: स्टेटिक क्लास लाइब्रेरी 1: कक्षा 1। कुछ}} ', [संदर्भ पृष्ठ] पर सिंटैक्स देखें (http://msdn.microsoft.com/en-us/library/ms742135.aspx)। मैंने अपना जवाब भी अपडेट किया जो गुमराह किया गया था ... –

उत्तर

0

मैं वास्तव में आवेदन के शीर्ष पर परिभाषित एक स्थिर संसाधन में शीर्षक है और मैं बाँध शीर्षक और कुछ और मैं करने के लिए इसे

<s:String x:Key="ApplicationName">My Application</s:String> 
10

कोड यह इस प्रकार दिखाई देगा में मुझे लगता है कि चाहते हैं:

Binding titleBinding = new Binding("WindowName"); 
titleBinding.Source = Properties.Resources; 
this.SetBinding(Window.Title, titleBinding); 

यह केवल समझ में आता है, तो परिवर्तन खिताब के लिए हो सकता है और बाध्यकारी उन परिवर्तनों की सूचना दी जाएगी (WindowName है करने के लिए या तो एक निर्भरता संपत्ति या Resources जरूरतों INotifyPropertyChanged लागू करने के लिए हो सकता है)

तो Properties एक नाम स्थान है (के रूप में डिफ़ॉल्ट वी.एस.-उत्पन्न गुणों के साथ मामला होगा) यदि आप कहीं xmlns & उपयोग x:Static का उपयोग कर इसे घोषित करने के लिए की जरूरत है:

<Window 
    ... 
    xmlns:prop="clr-namespace:App.Properties" 
    Title="{Binding Source={x:Static prop:Resources.WindowName}}"> 

एक और ध्यान दें: यदि आप प्रबंधित का उपयोग करते हैं विजुअल स्टूडियो के संसाधनों को आपको यह सुनिश्चित करने की आवश्यकता है कि गुणों का एक्सेस संशोधक public है, डिफ़ॉल्ट internal है जो बाध्यकारी केवल सार्वजनिक गुणों के लिए काम करता है क्योंकि अपवाद फेंक देगा।

+0

धन्यवाद। आपका आखिरी सुझाव मेरा मामला है, लेकिन यह काम नहीं करता है। कृपया मेरी पोस्ट का संपादित करें देखें। मैंने इसे स्पष्ट कर दिया है जैसा कि मैं कल्पना कर सकता था: कक्षा को विभिन्न असेंबली में ले जाया गया और इसी तरह। – alehro

+0

मैंने अधिक जवाब देने के लिए अपना जवाब संपादित किया, उम्मीद है कि इनमें से कुछ आपकी समस्या के अनुरूप हैं। –

+0

आपके द्वारा पहले सूचीबद्ध की गई विधि के पीछे कोड काम नहीं करता है। आप बाध्यकारी स्रोत के रूप में 'Properties.Resources' सेट नहीं कर सकते हैं। "... संसाधन एक प्रकार है, जो दिए गए संदर्भ में मान्य नहीं है" मैंने वहां संसाधन कुंजी निर्दिष्ट करने का प्रयास किया, और यह इसे स्वीकार करता है, लेकिन बाध्यकारी विफल रहता है। पाठ कुछ भी नहीं दिखाता –

0

क्या आपने संसाधन से एक्सेस संशोधक को आंतरिक से सार्वजनिक में बदलने की कोशिश की है?

मुझे अभी इसके साथ कुछ समस्या है।

/// <summary> 
    /// Looks up a localized string similar to Has been impossible to load the configuration information. 
    /// </summary> 
    internal static string ERROR_NoConfigurationLoaded { 
     get { 
      return ResourceManager.GetString("ERROR_NoConfigurationLoaded", resourceCulture); 
     } 
    } 

/// <summary> 
    /// Looks up a localized string similar to Has been impossible to load the configuration information. 
    /// </summary> 
    public static string ERROR_NoConfigurationLoaded { 
     get { 
      return ResourceManager.GetString("ERROR_NoConfigurationLoaded", resourceCulture); 
     } 
    } 
+1

हां, मैंने इसे किया है। कृपया मेरे प्रश्न के ClassLibrary1 के स्रोत कोड को देखें। सभी सार्वजनिक हैं। – alehro

1

को सिर्फ इस निकालें:

... ;assembly=ClassLibrary1" 
संबंधित मुद्दे