1

wp7 プロジェクトのテーマ フォルダーに、darktheme.xaml という名前のリソース ディクショナリを 1 つ定義しました。

<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>

すべての画像をビルド アクション Content および CopyIfnewer として実行し、テーマのビルド アクションをページとして実行しました

プロジェクトを実行すると、リソース ディクショナリをロードするための未処理の例外がスローされます。しかし、テーマ (リソース ディクショナリ) でこのコードをコメント アウトすると、機能し始めます。

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

実際には、これらの uri を設定して、appbar iconuri プロパティを設定し、これらの静的リソースを設定しています。ここで説明したように、 WP7 Image Uri as StaticResource

4

1 に答える 1

1

残念ながら、ApplicationBarIconButton にバインド (静的リソースを使用) することはできません。これは Silverlight コントロールではなく、Windows Phone 7 OS との低レベルの相互運用のための単なるラッパー オブジェクトです。したがって、データバインドできません。

そのための 2 つのオプションを提案できます。

最初の簡単な方法: コード ビハインドから操作できます。ここでは、resourcedictionary にもアクセスできます。これは、(ハードコードされた文字列を使用した) 私からの作業サンプルです。

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);
}

2 つ目は、さらにコーディングが必要です。独自の 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;
}

お役に立てば幸いです。

于 2013-02-03T21:39:36.947 に答える