2014-07-23 33 views
0

我有這樣的XAML我怎麼能訪問WPF窗口resoures

<mui:ModernWindow x:Uid="mui:ModernWindow_1" x:Class="App1.HomePage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mui="http://firstfloorsoftware.com/ModernUI" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib" 
    ContentSource="/Window1.xaml" 
    Title="MainWindow" Height="350" Width="525" WindowState="Maximized" MenuLinkGroups="{Binding menuLinkGroups}"> 
    <mui:ModernWindow.Resources> 
     <sys:String x:Key="ApplicationName">Bla Bla</sys:String> 
    </mui:ModernWindow.Resources> 
    <Grid Style="{StaticResource ContentRoot}" Name="mainGrid"> 
    </Grid> 
</mui:ModernWindow> 

我需要引用當前窗口的資源,所以我用這個:

object obj = this.Resources["ApplicationName"]; 

this.Resources不有任何資源!所以obj始終爲空。我怎樣才能參考這個窗口資源?

+0

你從哪裏寫代碼? –

+0

在簡單的按鈕。 – user3222589

+0

請檢查是否有任何資源'this.Resources.Count' –

回答

0

假設thisFrameworkElement,如WindowGridButton或類似的東西。

object obj = this.TryFindResource("ApplicationName"); 
+0

嘗試過,結果相同。 – user3222589

+0

嗯......奇怪......我在Codeplex上看到,ModernWindow繼承自Window(它繼承自'FrameworkElement'),並且資源和TryFindResource都不會被覆蓋。 MainFrid? –

0

您可以使用下面提及的代碼

var MainGrid=Application.Current.FindResource("strApp") 

this.FindResource("ApplicationName") 
+0

MainGrid? MainGrid不是一個資源,它是一個網格。 – user3222589

+0

亞這是錯字... –

0

假設this是控制...

var parent = Window.GetWindow(this) 

將得到窗口的控制目前,你應該能夠像你已經做到的那樣訪問資源

parent.Resources["ApplicationName"]; 
+0

一樣!找不到合理的理由。 – user3222589

+0

我懷疑ModernWindow正在用ResourceDictionaries(緩存它們或某物)做一些「聰明的事情」,這就是失敗的原因。 –

0

感謝所有人,我找到了解決方案

我清理並重建解決方案,再次使用locbaml.exe生成新的本地化dll。

0

您應該綁定在XAML中,而不是在後面的代碼中。

「res」是資源文件所在的命名空間。

在您的例子命名空間別名是 「本地」:

xmlns:local="clr-namespace:Project.Resources" 

所以,你的代碼應該是這樣的:

<Page Title ="{x:Static local:localStrings.step1Description}" /> 

其中:

「本地」 是命名空間的別名,其中資源文件位於。

「localStrings」是資源文件的名稱。

「step1Description」是資源文件中的一個條目。

+0

在我的情況下,我在後面的代碼中處理該事件以生成用戶特定的菜單,菜單字符串作爲資源存儲以提供多語言支持,如果您有更好的方法來直接綁定,請指向我。 – user3222589