2012-05-14 12 views
7

मैं एक ही codebase कि विभिन्न विन्यास में एक OOB SL5 एप्लिकेशन इंस्टॉल कर सकते हैं। रनटाइम पर कॉन्फ़िगरेशन के आधार पर (इनिट पैरामीटर द्वारा चुने गए) मैं इंस्टॉल करने से पहले ओओबी सेटिंग्स (शीर्षक, विंडो शीर्षक) को अपडेट करना चाहता हूं। ऐसा प्रतीत होता है कि संकलन समय पर OutOfBrowserSettings.xml फ़ाइल (या प्रोजेक्ट सेटिंग्स UI) के माध्यम से एकमात्र तरीका है। क्या मुझे कुछ याद आ रहा है या यह वही तरीका है?क्या मैं रनटाइम पर सिल्वरलाइट आउट-ऑफ-ब्राउज़र सेटिंग्स बदल सकता हूं?

उत्तर

2

MSDN के अनुसार आप ऐसा कर सकते हैं।

बिना किसी संकलन के आउट ऑफ़ ब्राउज़र समर्थन के लिए मौजूदा एप्लिकेशन को कॉन्फ़िगर करने के लिए, मौजूदा .xap फ़ाइल में कॉन्फ़िगरेशन एक्सएमएल को मैनिफेस्ट में जोड़ें। ऐसा करने के लिए प्रकट फ़ाइल में निम्न उदाहरण कोड से Deployment.OutOfBrowserSettings संपत्ति तत्व नकल, और फिर मान अद्यतन करें।

डिज़ाइनर के विकल्प के रूप में, आप निम्न उदाहरण में दिखाए गए अनुसार टेम्पलेट (AppManifest.xml गुण या मेरे प्रोजेक्ट फ़ोल्डर में) को पॉप्युलेट करके आउट-ऑफ-ब्राउज़र सेटिंग्स निर्दिष्ट कर सकते हैं। डिफ़ॉल्ट रूप से, बिल्ड मैनिफेस्ट जेनरेट करने के लिए मेनिफेस्ट टेम्पलेट का उपयोग करता है। हालांकि, टेम्पलेट एक्सएमएल विजुअल स्टूडियो में उपयोग करने के लिए आसान है।

स्रोत: http://msdn.microsoft.com/en-us/library/dd833073(v=vs.95).aspx

याद रखें, कि * .xap फ़ाइल एक सरल जिप है। तो आप इसे निकाल सकते हैं, संशोधित कर सकते हैं, और फिर इसे फिर से ज़िप कर सकते हैं। स्वचालित करने के लिए बहुत आसान लगता है।

आप रनटाइम पर एप्लिकेशन का शीर्षक भी बदल सकते हैं (मुझे नहीं पता कि आइकन या विवरण को कैसे बदला जाए, लेकिन मुझे लगता है कि वॉल्न्डट को आपकी खुद की क्रोम विंडो लागू करके) समझ में आता है। नमूना कार्यान्वयन के लिए का पालन करें this

शीर्षक स्थानीय बनाना करने के लिए आप के लिए बाध्य करने के लिए, शीर्षक के मान बदलने के लिए है, और अपने संसाधन के लिए यह बाँध (सभी कोड ऊपर के लिंक से नमूना परियोजना के कुछ अनुकूलन है):

mainpage .xaml:

<UserControl 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:Silverlight4.OOB.ChromelessWindow.Demo" x:Class="Silverlight4.OOB.ChromelessWindow.Demo.MainPage" 
mc:Ignorable="d" 
d:DesignHeight="300" d:DesignWidth="400" MinWidth="400" MinHeight="300"> 
<Grid x:Name="LayoutRoot" Background="White"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition/> 
    </Grid.RowDefinitions>   
    <Border BorderBrush="Black" BorderThickness="1" Margin="0,-25,0,0" Grid.Row="1"/> 
    <local:ControlBar x:Name="ucControlBar" VerticalAlignment="Top" Title="{Binding Source={StaticResource resxWrapper}, Path=Title}"></local:ControlBar> 
    <Border BorderBrush="Black" BorderThickness="1" CornerRadius="10" Grid.Row="1" Margin="10"> 
     <Border.Background> 
      <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0"> 
       <GradientStop Color="#FFFDC97A"/> 
       <GradientStop Color="White" Offset="0.5"/> 
       <GradientStop Color="#FFFDC97A" Offset="1"/> 
      </LinearGradientBrush> 
     </Border.Background> 

    </Border> 
    <ComboBox SelectionChanged="ComboBox_SelectionChanged" Grid.Row="1" Height="20"> 
     <ComboBoxItem Content="pl-PL" /> 
     <ComboBoxItem Content="en-GB" /> 
    </ComboBox> 
    <TextBlock x:Name="txtTitle" HorizontalAlignment="Center" Grid.Row="1" TextWrapping="Wrap" VerticalAlignment="Top" FontSize="32" Text="Silverlight 4 Custom Out-Of-Browser Window Demo" Margin="10" TextAlignment="Center" Foreground="#FF5A098F"/> 
    <TextBlock x:Name="txtInfo" HorizontalAlignment="Center" Grid.Row="1" TextWrapping="Wrap" Text="You are running inside Browser Window" VerticalAlignment="Bottom" Margin="10" FontSize="24" TextAlignment="Center"/>   
</Grid> 

जोड़ा फ़ाइल ResourceMock.cs:

public class ResourceMock:INotifyPropertyChanged 
{ 
    public string Title 
    { 
     get 
     { 
      MessageBox.Show(Thread.CurrentThread.CurrentCulture.Name); 
      switch (Thread.CurrentThread.CurrentCulture.Name) 
      { 
       case "en-GB": return "English"; break; 
       case "pl-PL": return "Polish"; break; 
       default: return "default"; 
        break; 
      } 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
    public void firePropertyChanged(string property) 
    { 
     OnPropertyChanged(property); 
    } 
} 

MainPage.xaml.cs:

public partial class MainPage : UserControl 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 

     if (App.IsRunningOOBWithPermission) 
     { 
      txtInfo.Text = "You are running outside Browser Window."; 
     } 
     else 
     { 
      txtInfo.Text = "You are running inside Browser Window."; 
     } 
    } 

    private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     var cultrue = (e.AddedItems[0] as ComboBoxItem).Content.ToString(); 
     try 
     { 
      Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultrue); 
      var res = App.Current.Resources["resxWrapper"] as ResourceMock; 
      res.firePropertyChanged("Title"); 
     } 
     catch(Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
    } 


} 

App.xaml:

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     x:Class="Silverlight4.OOB.ChromelessWindow.Demo.App" 
     xmlns:loc="clr-namespace:Silverlight4.OOB.ChromelessWindow.Demo" 
     > 
    <Application.Resources> 
     <loc:ResourceMock x:Key="resxWrapper"></loc:ResourceMock> 
    </Application.Resources> 
</Application> 

यह बहुत ही सरल नमूना है, दिखाने के लिए, कि आप क्रम में शीर्षक बदल सकते हैं। मैं मानता हूं कि अगर आपके पास बाइंडेबल संपत्ति के रूप में खुलासा हुआ शीर्षक है, तो आपको पता चलेगा कि अपने स्थानीयकरण को कैसे कार्यान्वित किया जाए।

ऊपर नमूना काम करने के लिए, आप जोड़ने की जरूरत है "en-GB; pl-पी एल" SupportedCultrues टैग करने के लिए, परियोजना फ़ाइल में (* .csproj)।

+0

प्रतिक्रिया के लिए धन्यवाद। यह तैनाती से पहले XAP फ़ाइल को संशोधित करने के लिए ठीक काम करता है, लेकिन याद रखें कि मैं जब वे स्थापित runtime_ _at वर्तमान OOB सेटिंग्स को संशोधित करने में सक्षम होना चाहिए। –

+0

ठीक है, मुझे अब मिल गया है। खैर, यह डिफ़ॉल्ट रूप से समर्थित नहीं है, आपको एक कस्टम विंडो बनाना होगा। एक नज़र डालें [यहां] (http: //www.codeproject।कॉम/लेख/68 9 55/सिल्वरलाइट -4-हाउ-कैन-आई-बिल्ड-ए-कस्टमाइज्ड-ओओबी-वाई) – Botis

+0

जो अभी भी मुझे चाहिए वह हासिल नहीं करेगा (हालांकि मैं देख सकता हूं कि मेरा प्रश्न पर्याप्त स्पष्ट नहीं था) । मुझे एक बेहतर उदाहरण दें: एक एकल एक्सएपी फ़ाइल रनटाइम पर संसाधन फ़ाइलों को स्विच करके कई भाषाओं की सेवा कर सकती है। यदि उपयोगकर्ता उस ऐप ओओबी को स्थापित करने का निर्णय लेता है, तो वे केवल शीर्षक, विवरण और आइकन देखेंगे जो मैनिफेस्ट से बाहर आता है। मुझे उस शीर्षक को अनुकूलित करने की आवश्यकता है जो इंस्टॉल किए गए ऐप के साथ वर्तमान लोकेल को एप्लिकेशन स्ट्रिंग की तरह दिखाता है। –

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