以编程方式更改XAML页面的背景图像(使用C#编写的UWP程序)

5

我已经搜索了一段时间,但实话说我还没有解决这个非常简单的问题。我有一个弹出菜单,并在其中一个菜单项上附加了一个事件。当我选择该项时,我希望可以通过编程方式更改XAML页面的背景图像。

<Grid x:Name="main">
    <Grid.Background>
        <ImageBrush Stretch="Fill" ImageSource="Assets/bg_1.jpg"/>
    </Grid.Background>
</Grid>

这是我得到的默认背景图片(网格基本上覆盖了整个页面)。

C# 事件代码如下:

private void MenuFlyoutItem_Click(object sender, RoutedEventArgs e)
{
    main.Background = new ImageBrush { ImageSource = new BitmapImage(new Uri("ms-appx:///MTG Life Counter/Assets/bg_2.jpg")) , Stretch = Stretch.None};
}

当我选择菜单项而不是设置图像作为背景时,它会变成白色。
我测试过了,这不是图像的问题。我知道我正在犯一个明显的错误,但我对UWP有点陌生,我找不到解决方法。
感谢您的时间,对我的无知表示抱歉。 默认背景 在我选择更改后,这里是空白背景
1个回答

4

有一个名为“BaseUri”的属性……尝试将其添加到您的代码中。

进行以下更改:

    private void MenuFlyoutItem_Click(object sender, RoutedEventArgs e)
    {
        main.Background = new ImageBrush { ImageSource = new BitmapImage(new Uri(this.BaseUri, "Assets/bg_2.jpg")), Stretch = Stretch.None };
    }

不幸的是,问题仍然存在。背景仍然是空白的。我也尝试了UriKind.RelativeOrAbsolute,但没有任何区别。 - Stamatis Stiliats
是的。我尝试了所有可能的这两个答案的组合。 - Stamatis Stiliats
UriKind.RelativeOrAbsolute方法在UWP项目中没有用处(它是来自WPF世界的方法)...你确保将图片添加到了你的项目中对吗? - Dark Templar
是的,即使我用默认图像替换默认值,它仍然会执行相同的操作。如果我将在XAML中放置源时有效的bg_1.jpg替换为动态的bg_1.jpg,则会再次放置一个空白背景。 - Stamatis Stiliats
听起来像是路径错误,你可以尝试使用文件名而不是完整路径。还要检查解决方案资源管理器中图像的设置...特别是构建类型设置。 - Dark Templar
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接