WPF: Создать половину эллиптической кнопки - PullRequest
1 голос
/ 29 января 2009

Не думаю, что это вполне возможно, но стоит посмотреть, что вы, ребята, говорите. Я пытаюсь создать полуэллиптическую кнопку в C # (не XAML, который мог бы через другой кривой шар). Если бы я хотел заранее задать размер кнопок, я бы просто использовал изображения или что-то в этом роде, но это не так, поскольку размер меняется. Вот более подробно:

  1. У меня есть эллипс с x-радиусом и y-радиусом (или шириной и высотой, умноженными на 2).

  2. Я хочу, чтобы две кнопки заполнили весь эллипс, каждая из которых занимает одну половину эллипса.

  3. Мне не нужны прямоугольные кнопки, которые выходят за пределы эллипса и обрезаются до родителя, мне нужны настоящие эллиптические кнопки, за исключением только половины эллипса на кнопку.

  4. Если этого нельзя сделать с помощью кнопок, но с помощью какого-либо другого элемента управления, то я бы хотел, чтобы этот элемент управления работал как кнопка.

Любая помощь или совет или указатели очень помогли бы.

Ответы [ 3 ]

4 голосов
/ 29 января 2009

Прежде чем я отвечу на это, я хотел бы знать, ПОЧЕМУ вы должны избегать XAML в приложении WPF? В любом случае, вы почти наверняка будете косвенно использовать XAML, так почему бы не использовать его - тогда создание вашей кнопки должно быть простым делом! Это именно то, для чего это!

Это все равно что пытаться построить дом из клейкой ленты, когда вы стоите рядом с кирпичом и строительным раствором! :)

0 голосов
/ 28 июля 2010

Вам нужно будет добавить дополнительные триггеры (например, IsPressed), но это должно дать вам довольно хорошую идею:

<Button Height="30" Width="30">
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate>
                        <Path Name="HalfEllipse" Stroke="Black" StrokeThickness="1" Fill="Blue">
                            <Path.Data>
                                <PathGeometry>
                                    <PathFigure IsFilled="True" StartPoint="0,0">
                                        <PolyBezierSegment Points="5,30 25,30 30,0" />
                                    </PathFigure>
                                </PathGeometry>
                            </Path.Data>
                        </Path>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter TargetName="HalfEllipse" Property="Fill">
                                    <Setter.Value>
                                        <SolidColorBrush Color="Green"/>
                                    </Setter.Value>
                                </Setter>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Button.Style>
</Button>

См. Эту страницу для получения дополнительной информации: http://www.codeproject.com/KB/WPF/glassbuttons.aspx

0 голосов
/ 29 января 2009

Используйте XAML, серьезно XAML на первый взгляд может показаться пугающим, но это не что иное, как головная боль, которую вы создаете для себя, пытаясь сделать это исключительно в коде.

Пользовательский стиль кнопок WPF

Пошаговое введение в стиль с помощью Blend

Уровень XAML 100

...