2017-06-29 18 views
0

いくつかのページをナビゲートする簡単なUWPアプリケーションを作っているとします。ユーザーが設定ページから選択した背景に応じて、すべてのページに共通の背景が必要です。UWPバインディング:C#を使用したXAMLの背景の変更

私はコンボボックス(および変更する必要があるグリッドの背景)とSettingsPage.xamlを持っている:

SettingsPage.xaml.csファイルとのインタフェース
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <ComboBox Name="ColourSelect" SelectionChanged="ComboBox_SelectionChanged"> 
     <ComboBoxItem Name="Red">Red</ComboBoxItem> 
     <ComboBoxItem Name="Green">Green</ComboBoxItem> 
     <ComboBoxItem Name="Blue">Blue</ComboBoxItem> 
    </ComboBox> 
</Grid> 

:私は含まれて私のApp.xamlを設定している

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     // Change background 
     if (Red.IsSelected) { } // Change to Red.png 
     else if (Green.IsSelected) { } // Change to Green.png 
     else if (Blue.IsSelected) { } // Change to Blue.png 
    } 

背景のリソースが、私はSettings.xaml.csのC#にバインドする方法がわかりません。

<Application.Resources> 
    <Style TargetType="Grid" x:Key="CommonBackground"> 
     <Setter Property="Background" Value="{ <!-- Some image. How to bind? --> }" 
    </Style> 
</Application.Resources> 

ユーザーの決定をアプリケーションリソースにバインドするにはどうすればよいですか?

ありがとうございます!

+0

なぜ自分の色のテンプレートを与える - ウィンドウズ10のテーマ全体をサポートできるのですか? – Peter

答えて

1

これは、アプリケーションの異なる部分でいくつかの変更が必要です。私の歩みに従ってください。

この場合、私は2つのリソースを作成しています。 1つは、設定Comboboxのカラースキームを維持するものです。 2番目はリソース内にBitMapImageです。

私のApplication.Resourceは以下のようになります。

<Application.Resources> 
    <image:BitmapImage x:Key="BackgroundSource" UriSource="ms-appx:///Assets/Red.png" /> 
    <x:String x:Key="BackgroundBrush">Red</x:String> 
</Application.Resources> 

App.xamlにxmlns:image="using:Windows.UI.Xaml.Media.Imaging"が追加されていることを確認してください。

ランタイム中にBackgroundをページに更新するために使用されるApp.xaml.cs内に静的メソッドを作成します。それは以下のようなものでなければなりません。

public static void UpdateBGColors(string Color) 
{ 
    switch (Color) 
    { 
     case "Red": 
      Current.Resources["BackgroundSource"] = "ms-appx:///Assets/Red.png"; 
      break; 
     case "Green": 
      Current.Resources["BackgroundSource"] = "ms-appx:///Assets/Green.png"; 
      break; 
     case "Blue": 
      Current.Resources["BackgroundSource"] = "ms-appx:///Assets/Blue.png"; 
      break; 
     default: 
      Current.Resources["BackgroundSource"] = "ms-appx:///Assets/Red.png"; 
      break; 
    } 
} 

今、あなたのcombobox_SelectionChangedは、以下のようになります。

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    ComboBox cb = sender as ComboBox; 

    ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings; 
    localSettings.Values["BackgroundBrush"] = (cb.SelectedValue as ComboBoxItem).Content; 
    App.UpdateBGColors((cb.SelectedValue as ComboBoxItem).Content.ToString()); 
} 

今、あなたは、リソースBackgroundSourceに各ページの背景を配線する必要があります。だから、どこでも背景は設定に基づいて設定したいページを設定する際に設定を変更した場合、この時点でコード

<Grid> 
    <Grid.Background> 
     <ImageBrush ImageSource="{StaticResource BackgroundSource}" /> 
    </Grid.Background> 
    ...... 
</Grid> 

の行の下に追加し、元のページに移動する場合は、設定ページに来ました、背景は[設定]で選択したものに自動的に設定されます。

ただし、次回にアプリを開いたときに同じ背景が読み込まれていることを確認してください。App.xaml.csでこれを行うには、OnLaunchedイベントの先頭に以下の行を追加します。

ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings; 
if (localSettings.Values["BackgroundBrush"] != null) 
{ 
    UpdateBGColors(localSettings.Values["BackgroundBrush"].ToString()); 
} 

設定ページでいるので、あなたのアプリがウリを修正するために割り当てられますBackgroundBrushBackgroundSourceに基づいて、ロードされ、ページBackhgroundとして使用されるときはいつでも、あなたが変更BackgroundBrush毎回ComboBoxアイテムを保存しています。

詳しいレポHere

グッドラック使用可能です。

0

[更新]これを使用して、設定を保存した後で使用できます。

SettingsPage.xaml

<Grid> 
    <Grid.Background> 
     <ImageBrush x:Name="colorImage" Stretch="UniformToFill"/> 
    </Grid.Background> 
    <ComboBox Name="ColourSelect" SelectionChanged="ComboBox_SelectionChanged"> 
     <ComboBoxItem Name="Red">Red</ComboBoxItem> 
     <ComboBoxItem Name="Green">Green</ComboBoxItem> 
     <ComboBoxItem Name="Blue">Blue</ComboBoxItem> 
    </ComboBox> 
</Grid> 

SettingsPage.xaml.cs

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (Red.IsSelected) 
     { 
      ChangeColorImage("ms-appx:///Assets/Red.png"); 
     } 
     else if (Green.IsSelected) 
     { 
      ChangeColorImage("ms-appx:///Assets/Green.png"); 
     } 
     else if (Blue.IsSelected) 
     { 
      ChangeColorImage("ms-appx:///Assets/Blue.png"); 
     } 
    } 

    private void ChangeColorImage(string imageUrl) 
    { 
     // using Windows.UI.Xaml.Media.Imaging; 
     BitmapImage imageSource = new BitmapImage(new Uri(imageUrl)); 
     colorImage.ImageSource = imageSource; 
    } 
関連する問題