在WP7

1

資源詞典我在主題定義一個資源字典在我的WP7項目開放的文件夾的darktheme.xaml在WP7

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:System="clr-namespace:System;assembly=mscorlib" 
    xmlns:sys="clr-namespace:System;assembly=System"> 

    <sys:Uri x:Key="AppBarSettingsImage">/Images/dark/Settings.png</sys:Uri> 
    <sys:Uri x:Key="AppBarTimingsImage" >/Images/dark/Timings.png</sys:Uri> 

</ResourceDictionary> 

名字和我打電話,這是我的App.xaml像這樣

<Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Themes/DarkTheme.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 

我做了所有的圖像作爲生成操作內容和CopyIfnewer而對於我的主題構建行動頁面

一旦我跑我的項目,它thorows未處理的異常加載資源d ictionary。但是當我在我的主題(資源字典)中註釋掉這段代碼時,它開始工作。

<sys:Uri x:Key="AppBarSettingsImage">/Images/dark/Settings.png</sys:Uri> 
<sys:Uri x:Key="AppBarTimingsImage" >/Images/dark/Timings.png</sys:Uri> 

其實我設置我的appbar iconuri財產與我的這些靜態資源設置設置這些URI。如這裏討論的 WP7 Image Uri as StaticResource

回答

1

不幸的是,你不能綁定(使用staticresource)到ApplicationBarIconButton。它不是一個Silverlight控件,它只是Windows Phone 7操作系統低層互操作的一個包裝對象。所以它不能被數據綁定。

我可以建議兩個選項來做到這一點。

首先和easyer之一:你可以從代碼隱藏中操縱它。在這裏你也可以訪問你的資源詞典,它只是我的一個工作樣本(使用硬編碼的字符串)。

void MainPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    //this.AppBarButton1.IconUri = new Uri("/Images/dark/Timing.png"); //WRONG NullReferenceException 
    var button1 = this.ApplicationBar.Buttons[1] as ApplicationBarIconButton; 
    button1.IconUri = new Uri(@"./Images/dark/Timing.png", UriKind.Relative); 
} 

第二個requeres多個編碼: 你可以實現自己的ApplicationBarIconButton。您需要派生自ApplicationBarMenuItem並執行Microsoft.Phone.Shell.IApplicationBarIconButton。 ,你可以一個DependencyProperty添加到您自己的控制等之後:

public Uri IconUri 
    { 
     get { return (Uri)GetValue(IconUriProperty); } 
     set { SetValue(IconUriProperty, value); } 
    } 

// Using a DependencyProperty as the backing store for IconUri. This enables animation, styling, binding, etc... 
public static readonly DependencyProperty IconUriProperty = 
    DependencyProperty.Register(
     "IconUri", 
     typeof(Uri), 
     typeof(ApplicationBarIconButton), 
     new PropertyMetadata(default(Uri), (d, e) => ((ApplicationBarIconButton)d).IconUriChanged((Uri)e.NewValue))); 

private void IconUriChanged(Uri iconUri) 
{ 
    var button = SysAppBarMenuItem as Microsoft.Phone.Shell.IApplicationBarIconButton; 
    button.IconUri = iconUri; 
} 

我希望它可以幫助你。