UWP与XAML中的App.config绑定

时间:2016-04-10 05:21:31

标签: c# xaml win-universal-app

你好我一直在寻找超过2个小时,但找不到合适的解决方案。我需要帮助如何从XAML中的App.config绑定一个值(不是在C#中)。

这是一个带背景的网格,它有一个路径,但我想将它绑定到App.config

    <Grid x:Name="MainGrid">
    <Grid.Background>
        <ImageBrush ImageSource="{Binding Source=}" Stretch="UniformToFill"/>
    </Grid.Background>

这是我的App.config,因为我不知道哪一个是正确的(在我的wpf书中使用了applicationSettings)我发布了两个:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="bg_sun_key" value="../Assets/sun.png"/>
  </appSettings>

  <applicationSettings>
    <MyAppName.Properties.Settings>
      <setting name="bg_sun" serializeAs="String">
        <value>../Assets/sun.png</value>
      </setting>
      <setting name="bg_planet" serializeAs="String">
        <value>../Assets/planet.png</value>
      </setting>
    </MyAppName.Properties.Settings>
  </applicationSettings>

</configuration>

我必须在{Binding ...}写些什么?还有其他建议吗?

我是C#和UWP的新手,所以请考虑一下你的答案。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

我认为你可能想要使用应用程序资源,而不是使用app.config。在App.xaml文件中,添加以下内容:

<Application.Resources>
    <ImageBrush x:Key="bg_sun_key" ImageSource="/Assets/sun.png"/>
</Application.Resources>

然后,您可以使用网格中的资源:

<Grid Background="{StaticResource bg_sun_key}">
</Grid>

更新了有关存储到应用程序设置的信息的答案:

与传统的Win32桌面应用程序不同,您无法在运行时从通用应用程序将设置保存到App.Config文件。这是因为安装文件夹是只读的。而是使用ApplicationData类。使用此代码存储设置:

var settings = ApplicationData.Current.LocalSettings.Values;
settings["ChosenImage"] = “planet.png”

此代码用于检索设置:

var chosenImage = “sun.png”; // set a default
var settings = ApplicationData.Current.LocalSettings.Values;

if (settings.ContainsKey("ChosenImage”))
{
    chosenImage = settings["ChosenImage"] as string;
}

ApplicationData还包括RoamingSettings,如果您希望用户选择漫游到不同的设备。

现在,您拥有用户选择的图像,您可以更新网格。您可以在后面的代码中执行此操作,例如:

var imageSource = new BitmapImage(new Uri("ms-appx:///Assets/" + chosenImage, UriKind.Absolute));
var imageBrush = new ImageBrush();
imageBrush.ImageSource = imageSource;
imageBrush.Stretch = Stretch.UniformToFill;

this.mainGrid.Background = imageBrush;

如果您正在使用MVVM模式,则可以使用类似的代码更新公开ImageBrush的视图模型上的属性,然后将网格的背景属性绑定到属性。

<Grid Background="{Binding ImageBrushProperty}">