你如何从Background获得ImageSource或值?

时间:2017-06-30 19:40:35

标签: c# uwp

我有一个Canvas,它在XAML中使用ImageBrush和ImageSource设置背景。

<ImageBrush ImageSource="/Assets/mainDiagram.jpg" />

我想知道如何从Canvas对象的Background成员中获取ImageSource或值。

以下是我正在使用的代码:

// this is the resolution of the background source image
private int[] BkgResXY
{
    get
    {
         int[] bkgResXY = new int[2];

         bkgResXY[0] = (int)(double)this.Background.GetValue(Panel.MaxWidthProperty);
         bkgResXY[1] = (int)(double)this.Background.GetValue(Panel.MaxHeightProperty);

         return bkgResXY;
    }
}

编辑:

我看到Panel类有多个高度属性,Background继承自Panel类。不确定哪一个是ImageSource分辨率。

编辑:

所以我已经走了这么远(this.Background as ImageBrush).ImageSource但我遇到了一个障碍,因为ImageSource不包含源图像的原始高度和宽度。

编辑:

我这样做是为了获得背景图像分辨率:

bkgResXY[0] = ((this.Background as ImageBrush).ImageSource as BitmapSource).PixelWidth;
bkgResXY[1] = ((this.Background as ImageBrush).ImageSource as BitmapSource).PixelHeight

1 个答案:

答案 0 :(得分:2)

要访问ImageBrush的属性,您需要先放置Background属性。为了安全起见,我更倾向于使用as运算符而不是简单的强制转换。拥有Canvas

<Canvas x:Name="myCanvas">
    <Canvas.Background>
        <ImageBrush ImageSource="1.jpg" />
    </Canvas.Background>
</Canvas>

您可以获得背景图片的原始宽度,如

var canvasBackground = myCanvas.Background as ImageBrush;
if (canvasBackground != null)
{
    //Get the ORIGINAL width of the source

    var bitmapImage = canvasBackground.ImageSource as BitmapImage;
    if (bitmapImage != null)
    {
        var originalBackgroundWidth = bitmapImage.PixelWidth;
    }
}