Клип 4: 3 изображение в WPF с кружком - PullRequest
3 голосов
/ 27 мая 2010

Я пытаюсь обрезать изображение 4: 3 кружком в элементе управления сеткой.

Мне нужен круговой клип, чтобы показать изображение с середины в идеальном круге. Смотри ниже.

альтернативный текст http://www.cse.unsw.edu.au/~vjro855/Untitled.png

Круг должен динамически изменить размер изображения.

Я пробовал Canvas.Clip и Ellipse + VisualBrush без достижения правильного поведения.

Спасибо!

1 Ответ

3 голосов
/ 27 мая 2010

Решил мою проблему.

Решением было использование конвертеров как части свойства Grid.Clip. Я использовал код со следующего сайта.

http://blogorama.nerdworks.in/entry-CenteringelementsonacanvasinWP.aspx

Проблема, с которой я столкнулся, заключалась в том, чтобы использовать EllipseGeometry вместо Ellipse.

Ellipse использует height и width, а EllipseGeometry использует radiusx,y и center.

С Ellipse я мог бы просто установить высоту и ширину для высоты изображения, чтобы получить нужный клип.

Было бы намного проще, если бы выражения работали с привязкой, т.е. {Binding Path=expr}

    <Grid>

    <Grid.Clip>  

        <EllipseGeometry>
            <EllipseGeometry.RadiusX>
                <MultiBinding
                    Converter="{StaticResource HalfValue1}">
                    <Binding
                        ElementName="vemap"
                        Path="ActualHeight" />
                </MultiBinding>
            </EllipseGeometry.RadiusX>
            <EllipseGeometry.RadiusY>
                <MultiBinding
                    Converter="{StaticResource HalfValue1}">
                    <Binding
                        ElementName="vemap"
                        Path="ActualHeight" />
                </MultiBinding>
            </EllipseGeometry.RadiusY>
            <EllipseGeometry.Center>
                <MultiBinding
                    Converter="{StaticResource HalfValue}">
                    <Binding
                        ElementName="vemap"
                        Path="ActualHeight" />
                    <Binding
                        ElementName="vemap"
                        Path="ActualWidth" />
                </MultiBinding>
            </EllipseGeometry.Center>
        </EllipseGeometry>

    </Grid.Clip>       

    <Image>

</Grid>
...