从代码后端添加图像/ImageBrush

6

我正在尝试将图像作为UserControl的背景添加。根据变量的值,我需要更改该背景,但无论我使用什么路径或Uri格式,背景都不会更改。

我在stackoverflow上看到了很多问题,但没有一个可以解决我的问题。 我放下了下面的代码:

            if (callback.liveUvis.ContainsUVI(uvi))
            {
                this.Status.Text = "LIVE";


                ImageBrush imgB = new ImageBrush();
                BitmapImage btpImg = new BitmapImage();                    
                btpImg.UriSource = new Uri(@"///IMG///Live///bck_frame_info_video_live.png", UriKind.Relative);
                //imgB.ImageSource = new BitmapImage(new Uri("~/IMG/Live/bck_frame_info_video_live.png", UriKind.RelativeOrAbsolute));
                //imgB.ImageSource = new BitmapImage(new Uri("ms-appx:///IMG/Live/bck_frame_info_video_live.png"));
                imgB.ImageSource = btpImg;
                this.Background = imgB;
            }

当我尝试附加图片时,我也遇到了同样的问题...我猜这也与Uri格式有关,但为了保险起见,我还是把代码留在这里 :)

    private void setIcon_Desc(string dd)
    {
        try
        {
            Image img = new Image();
            img.Source = new BitmapImage(new Uri(this.BaseUri, "IMG/pictos_small/white/160dpi/" + dd + ".png"));
            img.Stretch = Stretch.None;
            this.Icon = img;
            this.Sport.Text = callback.disc.getDescription(dd).ToUpper();
        }
        catch(Exception ex)
        {
            callback.exception.writeExceptions(ex);
        }

    }

谢谢您的提前帮助!


图片是否包含在项目中?请确保编译操作设置为“内容”。 - Kevin Gosse
@KooKiz 是的,我的项目中有一个包含子文件夹和图像的文件夹(我知道在Android中如果图像在子文件夹中是不可能使用的,但我不确定UWP是否也是这样...)。当你说“确保构建操作设置为'Content'”时,你是指图像对吗? - Eva FP
是的,在文件属性中(在Visual Studio的解决方案资源管理器中,右键单击文件,单击属性,应该有一个名为“Build Action”的文件)。如果构建操作设置为内容,则应该能够使用类似<Image Source="IMG/Live/bck_frame_info_video_live.png" />的东西打开文件(也就是说,如果您的图片在“IMG”文件夹的“Live”子文件夹中)。使用Uri对象时可能会有一些微妙之处,因此我建议首先尝试使用我提供的代码直接从XAML中进行。 - Kevin Gosse
我已经检查了图像的构建操作是否设置为“内容”,确实如此...问题是我必须从代码后台添加图像...我在那里没有选择:(但我已经在其他页面中使用了图像,并且能够从XAML添加它们,问题出现在CS文件中。 - Eva FP
好的,那么我们可以专注于URI格式。你可以尝试这个:https://dev59.com/12sz5IYBdhLWcg3w6MXn#9562069 它是ms-appx方案,但只有一个/。 - Kevin Gosse
它也不起作用 :'( - Eva FP
1个回答

5

当更改用户控件的背景时,我可以重现您的问题。

我目前使用的解决方法是更改控件中根UI元素的背景。

<Grid x:Name="container">
    <Grid.Background>
        <ImageBrush Stretch="Fill" ImageSource="Images/bg-blue.png"/>
    </Grid.Background>
    <StackPanel>
        <TextBlock>Hello World</TextBlock>
        <Button Click="Button_Click">Change Background</Button>
        <Image x:Name="display"></Image>
    </StackPanel>
</Grid>

public sealed partial class MyUserControl : UserControl
{
    public MyUserControl()
    {
        this.InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        ImageBrush imgB = new ImageBrush();

        BitmapImage btpImg = new BitmapImage();

        btpImg.UriSource = new Uri(@"ms-appx:///images/bg-light-blue.png");

        imgB.ImageSource = btpImg;

        container.Background = imgB;
    }
}

你已经将Uri更改为new Uri("ms-appx:///IMG/Live/bck_frame_info_video_live.png")了吗? - Jeffrey Chen
是的! 我已经解决了这两个问题。 我已将图标作为背景附加,就像您提出的解决方案 :) - Eva FP

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