2011-02-12 8 views
15

मेरे डब्ल्यूपीएफ 4 डेस्कटॉप-आधारित एप्लिकेशन में साइडबार मेनू वाला एक बड़ा ब्लॉक है जो प्रत्येक विंडो में दोहराता है और एक्सएएमएल की लगभग 70 लाइनें लेता है। कोड पुन: उपयोग में सुधार करने के लिए, मैं दो फ़ाइलों में XAML फाइल विभाजित करने के लिए करना चाहते हैं:उप-एक्सएएमएल फाइलों की संख्या में एक बड़ा एक्सएएमएल विभाजित करें

  1. XAML फाइल कि साइडबार मेनू (≈70 लाइनों)
  2. बेस XAML फाइल शामिल है कि के लिए कोड शामिल «शामिल/संदर्भ साइडबार मेनू कोड

साथ XAML-फाइल करने के लिए »के रूप में मैं समझ गया, वहाँ मेरी समस्या को लागू करने के दो तरीके हैं:

  1. उपयोग ResourceDictionary
  2. उपयोग UserControl/CustomControl

मेरे प्रश्न हैं:

  1. ResourceDictionary और UserControl के बीच क्या अंतर है? क्या आप मुझे उदाहरण दे सकते हैं जहां मुझे उपयोगकर्ता नियंत्रण और संसाधन डॉट का उपयोग करना है?

  2. क्या आप एक पूर्ण कोड उदाहरण दे सकते हैं कि एक एक्सएएमएल-फाइल की सामग्री को अन्य में कैसे शामिल/आयात करना है?

पीएस है तो बस अपने शैलियों/टेम्पलेट्स आदि के लिए एक कंटेनर तो तुम सच में एक शैली का उपयोग (और यह संदर्भित के बीच एक विकल्प है

<Border Style="{StaticResource Body_SideBarMenu_Border_Settings}"> 
    <StackPanel Style="{StaticResource Body_SideBarMenu}"> 

    <TextBlock Style="{StaticResource Body_SideBarMenu_Title}" 
      Text="{x:Static res:Resources.WinApp_SideBarMenu_Title}" /> 

     <TextBlock x:Name="SideBar_WinReports" 
       Style="{StaticResource Body_SideBarMenu_Item}" 
       Text="{x:Static res:Resources.DashListMarker}"> 
        <Hyperlink KeyboardNavigation.TabIndex="12" 
          Style="{StaticResource Body_SideBarMenu_Item_Hyperlink}" 
          Click="Call_WinReports_Click"> 
          <TextBlock Text="{x:Static res:Resources.WinApp_ModuleName_Reports}" /> 
        </Hyperlink> 
     </TextBlock> 

    </StackPanel> 
</Border> 

उत्तर

13

ResourceDictionary: यहाँ कोड का एक उदाहरण है कि मैं अलग XAML-फाइल करने के लिए निर्यात करना चाहते है संसाधन संसाधन के माध्यम से) या उपयोगकर्ता नियंत्रण।

दोनों के बीच अंतर करने के लिए, अपने आप से एक प्रश्न पूछें: क्या आप कुछ मौजूदा नियंत्रण के लिए सिर्फ एक और रूप लागू कर रहे हैं, या आप वास्तव में कुछ नया कार्यान्वित कर रहे हैं, जो सिर्फ एक सूची दृश्य (या सीमा, या एक से अधिक है) कॉम्बोबॉक्स आदि)? पूर्व मामले में, एक शैली का उपयोग करें; बाद में, एक नया UserControl बनाएँ।

विशेष रूप से आपके मामले के लिए, मैं UserControl के लिए जाऊंगा।


कोड उदाहरण (हालांकि पूरा नहीं)

(कृपया ध्यान दें कि वी.एस. के साथ डाला जा सकता है निम्नलिखित कोड के लिए एक टेम्पलेट "नए UserControl जोड़ने")

Xaml:

<UserControl x:Class="SomeNamespace.SidebarMenu" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

    <UserControl.Resources> <!-- you can define local styles here --> 
     <Style x:Key="SidebarMenuTextblock" TargetType=TextBlock> 
      ... 
     </Style> 
    </UserControl.Resources> 

    <Border Background=...> 
     <StackPanel> 

      <TextBlock 
       x:Name="Put_a_name_if_you_want_to_reference_this_item_in_code_behind" 
       Style="{StaticResource SidebarMenuTextblock}" 
       Text="{x:Static res:Resources.WinApp_SideBarMenu_Title}" /> 
      ...  </StackPanel> 
    </Border> 
</UserControl> 

।सीएस:

using System; 
using System.Windows; 
using System.Windows.Controls; 

namespace SomeNamespace 
{ 
    public partial class SidebarMenu : UserControl 
    { 
     public NumericUpDown() 
     { 
      InitializeComponent(); 
     } 
     ... 
     // define here your properties etc, 
    } 
} 

अब, आप उस तरह नियंत्रण का उपयोग कर सकते हैं: अभिव्यक्ति मिश्रण में,

<Window 
    x:Class="SomeOtherNamespace.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:controls="clr-namespace:SomeNamespace"> 

    <Grid> 
     <controls:SidebarMenu PropertyIfYouDefinedOne="SomeValue"/> 
     ... 
    </Grid> 

</Window> 
1

आप अभिव्यक्ति स्टूडियो पर अपने हाथों को प्राप्त कर सकते हैं, तो आप बस सही कोई नियंत्रण पर क्लिक करें और परिवर्तित कर सकते हैं यह एक उपयोगकर्ता नियंत्रण के लिए। उस के रूप में आसान है।

उपयोगकर्ता नियंत्रण XAML फ़ाइल को विभाजित करने के लिए अच्छे हैं। संक्षेप में, इसका उपयोग मौजूदा नियंत्रण के व्यवहार को फिर से परिभाषित करने के लिए किया जाता है।

हालांकि, उपयोगकर्ता नियंत्रण के साथ, आप पूरे WPF लेआउट नियंत्रण को परिभाषित कर सकते हैं और उन्हें उनके अंदर की सामग्री के साथ उपयोगकर्ता नियंत्रण में परिवर्तित कर सकते हैं। यह एक परियोजना के लिए कई डेवलपर्स में फैला हुआ बहुत उपयोगी है, और इसका उपयोग एमडीआई के व्यवहार को अनुकरण करने के लिए भी किया जा सकता है, जो डब्ल्यूपीएफ में अनुपस्थित है।

+1

और, यह केवल पुन: प्रयोज्य नियंत्रणों पर विचार नहीं कर रहा है। आप इसे ऐसे नियंत्रण में कर सकते हैं जो पुन: प्रयोज्य नहीं हैं। – r3st0r3

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

  • कोई संबंधित समस्या नहीं^_^