2009-10-19 8 views
5

मेरे पास मेरे app.xaml के अंदर सेट टेक्स्टब्लॉक के लिए एक शैली है, फिर इसे मेरे एप्लिकेशन के माध्यम से टेक्स्टब्लॉक पर लागू किया जाता है और ठीक काम करता है।App.xaml शैली का उपयोग उपयोगकर्ता नियंत्रण में नहीं किया जा सकता है, कैसे आते हैं?

हालांकि मुझे एक त्रुटि मिलती है: "अगर मैं इस शैली को अपने उपयोगकर्ता नियंत्रण में टेक्स्टब्लॉक पर लागू करता हूं तो" उदाहरण का उदाहरण नहीं बना सका ", यह एक समस्या कैसे आती है?

<UserControl x:Class="Client.Usercontrols.MyButton" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" MinHeight="30" MinWidth="40" 
DataContext="{Binding RelativeSource={RelativeSource Self}}"> 

<Button Width="Auto" HorizontalAlignment="Center"> 

    <Border CornerRadius="5" BorderThickness="1" BorderBrush="Transparent" > 
     <Grid> 
      <Image Name="tehImage" Source="{Binding ImageSource}" /> 
      <TextBlock Name="tehText" Text="{Binding Text}" 
       Style="{StaticResource ButtonText}" /> <-- This causes error 
     </Grid> 
    </Border> 

</Button> 

धन्यवाद, Kohan

- App.xaml कोड -

<Application x:Class="Client.App" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    StartupUri="Mainpage.xaml"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Styles/CascadingStyles.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

- CascadingStyles.Xaml -

<Style TargetType="{x:Type TextBlock}" x:Key="ButtonText" > 
    <Setter Property="FontSize" Value="10" /> 
    <Setter Property="VerticalAlignment" Value="Bottom" /> 
    <Setter Property="HorizontalAlignment" Value="Center" /> 
    <Setter Property="FontFamily" Value="Lucida Sans Unicode" /> 
    <Setter Property="Foreground" Value="#0F004E" /> 
</Style> 

उत्तर

10

मूल रूप से , यह StaticResource नहीं ढूंढ सकता क्योंकि यह आपके उपयोगकर्ता नियंत्रण के साथ फ़ाइल में नहीं है। UserControl.xaml App.xaml के बारे में कुछ भी नहीं जानता है।

आपको DynamicResource का उपयोग करना चाहिए, इस तरह इसे रनटाइम पर लागू किया जाएगा।

+0

मैं DynamicResource करने के लिए बदल पर अभी भी हो रहा है और यह काम करता है, यह भी अगर मैं बस दिलचस्पी की वजह से, कैसे आ app.config के दायरे में शैली सेट काम करता है UserControl तक नहीं पहुंचता है लेकिन यह किसी भी पेज या विंडो में सभी नियंत्रणों तक पहुंचता है? – 4imble

+2

मूल रूप से, आपको एक स्टैंड-अलोन इकाई के रूप में UserControl के बारे में सोचना होगा। उदाहरण के लिए, यह एक अलग असेंबली में रह सकता है। एक कस्टम नियंत्रण उसी तरह काम करता है। वे केवल जानते हैं कि आप उन्हें क्या कहते हैं। आदर्श रूप में, आप अपनी शैलियों को संसाधन डिक्शनरी में डाल देंगे और उन्हें शामिल करेंगे जहां आपको उनकी आवश्यकता है - App.xaml, आपका उपयोगकर्ता नियंत्रण इत्यादि। इससे आपकी सामग्री "त्वचा" या "विषय" को आसान बनाता है - बस संसाधन को स्वैप करें शब्दकोशों। –

+0

आह, ठीक है। समझ में आता है। धन्यवाद – 4imble

4

पिछला उत्तर बिल्कुल गलत है। आप निश्चित रूप से आवेदन स्तर पर संसाधनों को परिभाषित कर सकते हैं और उन्हें UserControls के भीतर से संदर्भित कर सकते हैं। वास्तव में, यह संसाधन डुप्लिकेशन को रोकने के लिए अक्सर प्रदर्शन बढ़ा सकता है। "स्टेटिक रिसोर्सेज लुकअप व्यवहार" शीर्षक के तहत this page पर वर्णित स्टेटिक संसाधनों की सूची में एप्लिकेशन संसाधनों को तीसरे स्थान पर चेक किया गया है।

मुझे लगता है कि आपके पास एक टाइपो या आपकी समस्या के कारण कोई अन्य समस्या है। क्या आप app.xaml कोड पोस्ट कर सकते हैं?

+0

अनुरोध के रूप में जोड़ा गया कोड, अजीब लगता है कि यह त्रुटि को सामान्य संसाधन के रूप में उत्पन्न कर रहा था और फिर काम करता है अगर मैं इसे स्थानीय संसाधन में असाइन करता हूं या इसे गतिशील बनाता हूं। – 4imble

+0

कॉपी कोड verbatim और कोई त्रुटि के साथ बनाता/चलाता है। क्या आपके पास प्राप्त होने वाली त्रुटि के बारे में अधिक जानकारी है? –

+0

नोट: मैंने UserControl में बाइंडिंग को हटा दिया क्योंकि मैं गुणों को लागू करने के लिए समय बिताना नहीं चाहता था।शायद यह समस्या का स्रोत है? –

0

मैं ऐसी समस्या पर कुछ घंटे खो दिया है, लेकिन यह केवल अभिव्यक्ति ब्लेंड 4.

के रूप में इस ब्लॉग पोस्ट में विस्तार से बताया करने के लिए लागू होता है:

http://blogs.msdn.com/b/unnir/archive/2009/03/31/blend-wpf-and-resource-references.aspx

अभिव्यक्ति का उपयोग कर StaticResources को हल करने की कोशिश करेंगे मिश्रण आवेदन। के बजाय आपके आवेदन आवेदन। स्रोत। यह के रूप में सुझाव ब्लेंड 4.0.30422.0

संबंधित मुद्दे

 संबंधित मुद्दे