Растяжение эллипса не имеет никакого эффекта - PullRequest
0 голосов
/ 12 января 2019

Может кто-нибудь объяснить, почему Stretch не имеет эффекта в элементе Ellipse. Независимо от того, что я использую None, Fill, UniformToFill или Uniform, результат всегда одинаков.

Если я использую этот же код внутри DataTemplate (GridView), он будет работать как надо.

<Button x:Name="UI_Application_LogIn_ProfilePictureButton_Button" Style="{StaticResource LogInButton}" BorderBrush="{ThemeResource SystemControlForegroundBaseMediumBrush}" IsTabStop="False" UseSystemFocusVisuals="False">
    <Grid x:Name="UI_Application_LogIn_ProfilePicture_Grid" IsHitTestVisible="False">
        <Ellipse x:Name="UI_Application_LogIn_ProfilePicture" Width="160" Height="160">
            <Ellipse.Fill>
                <ImageBrush x:Name="UI_Application_LogIn_ProfilePictureImageBrush" Stretch="UniformToFill" AlignmentY="Top"/>
            </Ellipse.Fill>
        </Ellipse>
        <Ellipse x:Name="UI_Application_LogIn_ProfilePictureNonStaticLightEffect" Width="160" Height="160" Fill="{ThemeResource SystemControlHighlightTransparentRevealBorderBrush}"/>
    </Grid>
</Button>

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Я нашел причину, по которой растяжение не сработало. Это был действительно пердящий мозг. Я забыл использовать Stretch в своем коде при создании нового ImageBrush. Поэтому добавление строки if (BrushStretch != null) (TargetShape.Fill as ImageBrush).Stretch = BrushStretch.Value; после создания нового ImageBrush решит проблему.

    //STORAGE FILE TO SHAPE
    public static async Task<Shape> StorageFileToShape(Shape TargetShape, StorageFile SourceStorageFile, Stretch? BrushStretch, AlignmentX? BrushAlignmentX, AlignmentY? BrushAlignmentY)
    {
        //IF SHAPE NULL RETURN NULL
        if (TargetShape == null) return null;
        //IF STORAGEFILE NULL OR NOT AVAILABLE RETURN NULL
        if (SourceStorageFile == null || !SourceStorageFile.IsAvailable) return null;
        //IF BRUSH IS NULL OR ITS TYPE ISN'T 'ImageBrush' CREATE NEW BRUSH
        if (TargetShape.Fill == null || TargetShape.Fill.GetType() != typeof(ImageBrush)) TargetShape.Fill = new ImageBrush();
        //SET STRETCH
        if (BrushStretch != null) (TargetShape.Fill as ImageBrush).Stretch = BrushStretch.Value;
        //SET ALIGNMENT X
        if (BrushAlignmentX != null) (TargetShape.Fill as ImageBrush).AlignmentX = BrushAlignmentX.Value;
        //SET ALIGNMENT Y
        if (BrushAlignmentY != null) (TargetShape.Fill as ImageBrush).AlignmentY = BrushAlignmentY.Value;
        //GET PICTURE 
        (TargetShape.Fill as ImageBrush).ImageSource = await StorageFileToBitmapImage(SourceStorageFile);
        //SET SHAPE FILL
        TargetShape.Fill = TargetShape.Fill as ImageBrush;
        //RETURN SHAPE
        return TargetShape;
    }
    //STORAGE FILE TO BITMAP IMAGE
    public static async Task<BitmapImage> StorageFileToBitmapImage(StorageFile SourceStorageFile)
    {
        BitmapImage TargetBitmapImage = new BitmapImage();
        TargetBitmapImage.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
        using (var BitmapImageFileStream = await SourceStorageFile.OpenAsync(FileAccessMode.Read))
        {
            await TargetBitmapImage.SetSourceAsync(BitmapImageFileStream);
        }
        return TargetBitmapImage;
    }
0 голосов
/ 12 января 2019

Если вы хотите создать округленное изображение, используйте элемент управления Imagex из набора инструментов сообщества Windows

Вы можете посмотреть и поиграть с imagex здесь или вы можете ссылаться на ваше приложение по nuget на Microsoft.Toolkit.Uwp.UI.Controls Что касается вашей текущей проблемы, то это вызвано тем, что растяжение влияет только на кисть внутри затмения, а не на затмение само по себе, для того, чтобы выполнить такие настройки масштаба, как вы должны обернуть затмение вокруг элемента управления Viewbox и затем установите его Stretch Свойство так же, как на изображении

...