2015-04-24 2 views
2

В этой статье: https://msdn.microsoft.com/en-us/library/windows/apps/jj206957%28v=vs.105%29.aspx показан способ обрезания изображения для эллипса, но когда я копирую его в свой проект, я получаю сообщение об ошибке, что я не могу использовать геометрию эллипса, потому что ожидаемый тип является «RectangleGeometry». Я создаю приложение Windows Phone 8.Как скопировать изображение в эллипс в XAML

Есть что-то не так с этой статьей или я что-то упускаю?

Мой 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>

+0

Это странно, и [здесь] (https://msdn.microsoft.com/en-us /library/windows/apps/windows.ui.xaml.uielement.clip.aspx) объясняет, что «Геометрия отсечения для UIElement.Clip в API Runtime Windows должна быть RectangleGeometry. Вы не можете указать непрямоугольную геометрию, как это допускается в некоторых инфраструктурах XAML, таких как Microsoft Silverlight ». –

+0

Жаль, тогда обрезание кругов стало популярным в последнее время. :( –

+0

Вы можете использовать 'Image.OpacityMask' (как описано в статье), чтобы дать тот же самый желаемый эффект. Просто сделайте GradientStop очень близко друг к другу (0,01 прочь). – Barnstokkr

ответ

9

MSDN говорит:

геометрия

Отсечение для UIElement.Clip в API среды выполнения Windows должна быть RectangleGeometry. Вы не можете указать непрямоугольную геометрию, как это допускается в некоторых инфраструктурах XAML, таких как Microsoft Silverlight.

Но вы можете достичь того же результата, используя элемент Ellipse и ImageBrush как Заливка кисти:

<Ellipse Width="100" Height="100"> 
    <Ellipse.Fill> 
     <ImageBrush ImageSource="{Binding Photo}"/> 
    </Ellipse.Fill> 
</Ellipse> 
+0

Я пробовал: ' <Эллипс Grid.Column = "0" ширина = "100" высота = "100"> ' Но он не работает (не обрезает изображение). –

+0

Что такое resutlt? Изображение не отображается или отображается без обрезания? Вы удалили предыдущий элемент ?! –

+0

Да, я заменяю изображение Ellipse, изображение отображается, но не отображается обрезанный. –

Смежные вопросы