如何在XAML中将图像剪切为椭圆

Emi*_*ska 2 c# xaml windows-phone-8

在本文中:https://msdn.microsoft.com/en-us/library/windows/apps/jj206957%28v=vs.105%29.aspx显示了一种将图像剪切为椭圆的方法,但是当我复制到我的项目我得到一个错误,我不能使用椭圆几何,因为期望的类型是"RectangleGeometry".我正在构建一个Windows Phone 8应用程序.

这篇文章有问题还是我错过了什么?

我的xaml代码示例:

<Border BorderThickness="1" BorderBrush="AliceBlue">
        <Grid Margin="{StaticResource GridMargin}">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="1*"></ColumnDefinition>
                <ColumnDefinition Width="2*"></ColumnDefinition>
                <ColumnDefinition Width="1.5*"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <Image Grid.Column="0" Stretch="Uniform" Source="{Binding Photo}">
                <Image.Clip>
                    <EllipseGeometry RadiusX="100" RadiusY="100" Center="225,175"/>
                </Image.Clip>
            </Image>
            <Grid Grid.Column="1" Margin="{StaticResource SmallGridMargin}">
                <Grid.RowDefinitions>
                    <RowDefinition Height="1.5*"></RowDefinition>
                    <RowDefinition Height="2*"></RowDefinition>
                    <RowDefinition Height="1*"></RowDefinition>
                </Grid.RowDefinitions>
                <Viewbox Stretch="Uniform" Grid.Row="0">
                    <TextBlock Text="{Binding BookAuthor}"></TextBlock>
                </Viewbox>
                <Viewbox Stretch="Uniform" Grid.Row="1">
                    <TextBlock Text="{Binding BookTitle}"></TextBlock>
                </Viewbox>
                <Viewbox Stretch="Uniform" Grid.Row="2">
                    <TextBlock Text="{Binding Id}"></TextBlock>
                </Viewbox>
            </Grid>
Run Code Online (Sandbox Code Playgroud)

Meh*_*raz 10

MSDN说:

Windows运行时API中UIElement.Clip的剪切几何必须是RectangleGeometry.您无法指定非矩形几何体,这在某些XAML框架(如Microsoft Silverlight)中是允许的.

但是使用Ellipse和ImageBrush元素作为填充画笔可以获得相同的结果:

<Ellipse Width="100" Height="100">
    <Ellipse.Fill>
       <ImageBrush ImageSource="{Binding Photo}"/>
    </Ellipse.Fill>
</Ellipse>
Run Code Online (Sandbox Code Playgroud)