【问题标题】:UWP Binding with App.config in XAMLUWP 与 XAML 中的 App.config 绑定
【发布时间】:2016-07-31 06:48:32
【问题描述】:

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

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

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

这是我的 App.config,因为我不知道哪个是正确的(在我的 wpf Book 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 的新手,所以请考虑一下。感谢您的帮助。

【问题讨论】:

    标签: c# xaml win-universal-app


    【解决方案1】:

    我认为您可能想要使用应用程序资源,而不是使用 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}">
    

    【讨论】:

    • 谢谢你的作品。但是静态听起来不好,有没有办法在运行时改变它?例如,如果用户想要设置另一个图像。在这里找到:stackoverflow.com/questions/11149556/app-config-change-value 我想在 App.config(用户设置)中保存更改
    • 您将无法从通用应用程序写入 app.config,而是需要使用 ApplicationData 类。我已经用一些示例代码更新了答案。
    猜你喜欢
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多