椭圆内的图像 XAML

Image within an ellipse XAML

我正在使用 VS2013、Windows 8.1 并正在开发一个 windows 商店应用程序。

我正在创建一个简单的联系人 - 列表视图,它在椭圆内显示联系人详细信息和联系人图像。当我点击列表视图项目时,我想在页面右侧显示联系人详细信息。现在我面临的问题是,我无法将联系人图像调整到右侧窗格椭圆上的正确大小。 我能够在我的列表视图中实现它,因为它是一个较小的椭圆。 重要提示:我不希望图像在 /Zoomed out 中看起来 stretched/Zoomed。它应该与它在列表视图中的显示完全一样。 (对于列表视图,我使用了 Ellipse.Fill 和 Imagebrush,但相对较小的椭圆)

到目前为止我尝试了什么:

  1. Ellipse.Fill 属性 根据大小绘制图像,但图像看起来被拉伸了。

  2. 我尝试在椭圆内的图片标签内设置"Stretch" 属性,但没有成功。

  3. 我试过 Image.clip,但我没有 "EllipseGeometry" 选项,只有 RectangleGeometry。

  4. 最后我创建了一个具有透明中心的图像,并将此框架像蒙版一样放置在联系人图像上。这适用于某些分辨率。但是当一些其他分辨率时,从后端绑定的联系人图像超出了框架,尽管我设置了 "MaxHeight" 或 "Height" 属性。

我想以正确的方式进行,因为我觉得添加图像蒙版可能不是实现此目的的好方法。请帮忙!

我为列表视图尝试了这个,n 工作正常,但是右窗格的相同代码看起来被拉伸了(我已经尝试删除拉伸属性,或尝试其他选项,如 Stretch ="None" /"Uniform"等)

我已附上截图。

由于没有明确提及代码,您可以同时使用 EllipseBorder。这是代码片段

<!--With Ellipse-->
<Ellipse Height="200"
         Width="200">
         <Ellipse.Fill>
             <ImageBrush Stretch="Uniform"
                         ImageSource="Assets/profile.png" />
         </Ellipse.Fill>
</Ellipse>


<!--With Border-->
<Border Height="200"
        Width="200"
        CornerRadius="150">
        <Border.Background>
            <ImageBrush Stretch="Uniform"
                        ImageSource="Assets/profile.png" />
        </Border.Background>
</Border>

这是结果

ImageBrush 中的属性 "AlignmentX AlignmentY" 解决了我的问题。

如果您的图像是纵向的,那么您可以像这样使用 ImageBrush 的 Stretch、AlignmentX、AlignmentY 属性来获得最佳预览效果

<Border CornerRadius="20" BorderThickness="1" BorderBrush="DarkGoldenrod">
        <Ellipse Width="40" Height="40">
            <Ellipse.Fill>
                <ImageBrush ImageSource="{Binding PractitionerPhoto}"  Stretch="UniformToFill" AlignmentX="Center" AlignmentY="Top" />
            </Ellipse.Fill>
        </Ellipse>
    </Border>