0

我的 MainPage.xaml 中有一个全景控件,我希望用户能够通过使用 listpicker 控件来更改另一个页面(我的 SettingsPage.xaml)中的背景 png 图像。我已经成功地用几个测试图像名称填充了列表选择器,并且可以使用它来更改选择,但是我不确定如何从我的 SettingsPage.xaml 访问 MainPage.xaml 以在 Listpicker selectedIndex 时更改实际图像被改变。到目前为止,我所拥有的如下:

主页.xaml

<controls:Panorama x:Name="panorama" Title="Application Title">
        <controls:Panorama.Background>
            <ImageBrush ImageSource="PanoramaBackground.png"/>  //the default background
        </controls:Panorama.Background>

        ...

</controls:Panorama>

设置页面.xaml

<toolkit:ListPicker x:Name="ThemeListPicker" Header="Theme" Grid.Row="2" Grid.ColumnSpan="2"
                                        ItemTemplate="{Binding ThemeItemTemplate}" SelectedIndex="{Binding}"
                                        SelectionChanged="ThemeListPicker_SelectionChanged"/>

SettingsPage.xaml.cs

String[] Theme = 
    {
        "Default",
        "Bubbles",
        //...
    };

public SettingsPage()
    {
        InitializeComponent();

        //Theme list picker
        this.ThemeListPicker.ItemsSource = Theme;
        this.ThemeListPicker.DataContext = ThemeListPicker.SelectedIndex;
    }

private void ThemeListPicker_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (e.AddedItems.Count <= 0) //to eliminate IndexOutOfRangeException
        {
            return;
        }

        string selectedItem = e.AddedItems[0] as string;

        switch(selectedItem)
        {
            case "Default":
                //change panorama background here (PanoramaBackground.png)
                this.ThemeListPicker.SelectedIndex = 0;
                break;
            case "Bubbles":
                //change panorama background here (PanoramaBackground_Bubbles.png)
                this.ThemeListPicker.SelectedIndex = 1;
                break;
        }
    }
4

2 回答 2

1

您可以创建一个 Settings.cs 类,该类可用于在隔离存储中保存设置条目,其中一个设置可以是背景图像。

有关实施示例,请参见此处:

http://msdn.microsoft.com/en-us/library/ff769510%28v=vs.92%29.aspx

如果您在应用程序运行时需要设置,完成您想要的最简单的方法是在 App.xaml.cs 中使用公共字符串对象(例如称为 YourString)

然后你可以从 Settings.xaml 页面设置它,实际上是后面的代码,当你的列表选择器选择改变如下:

private void ThemeListPicker_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (e.AddedItems.Count <= 0) //to eliminate IndexOutOfRangeException
    {
        return;
    }

    string selectedItem = e.AddedItems[0] as string;

    switch(selectedItem)
    {
        case "Default":
            //change panorama background here (PanoramaBackground.png)
            (Application.Current as App).YourString = "PanoramaBackground.png";
            break;
        case "Bubbles":
            //change panorama background here (PanoramaBackground_Bubbles.png)
            (Application.Current as App).YourString = "PanoramaBackground_Bubbles.png";
            break;
    }
}

然后,当您导航到 MainPage.xaml 页面时,检查 YourString 字符串是否不为空。如果不是,则从它创建一个 URI 并将全景背景设置为该图像 URI。

于 2012-07-13T06:36:20.983 回答
0

为了解决这个问题,我只需在 MainPage.xaml 中设置一个原始默认 ImageSource 路径,然后在 MainPage.xaml.cs OnNavigatedTo 事件中,我相应地更新了在 SettingsPage 中设置的全景背景图像。

主页.xaml

<controls:Panorama x:Name="panorama" Title="Application Title"> 
    <controls:Panorama.Background> 
        <ImageBrush ImageSource="PanoramaBackground.png"/>  //the default background 
    </controls:Panorama.Background> 

    ... 

</controls:Panorama> 

MainPage.xaml.cs

protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        Uri themeUri = new Uri(Settings.Theme.Value, UriKind.Relative);  //holds the uri string of the selected background from SettingsPage

        BitmapImage image = new BitmapImage(themeUri);
        ImageBrush brush = new ImageBrush();
        brush.ImageSource = image;
        panorama.Background = brush;
    }
于 2012-07-13T20:24:56.073 回答