powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / cannot add content to an object of type Pie
9 сообщений из 9, страница 1 из 1
cannot add content to an object of type Pie
    #38837984
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такой класс
Код: c#
1.
2.
3.
4.
public sealed class Pie : Shape
{
.................
}



Что мне нужно дописать, чтобы я мог в разметке делать такое:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<local:Pie x:Name="piece1" 
                                           CentreX="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Radius}" 
                                           CentreY="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Radius}" 
                                           Radius="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Radius}" 
                                           AnglePie="30"  Rotation="{Binding Path=Angel}">
                                    <Grid>
                                        <Image RenderTransformOrigin=".5 .5" ToolTipService.InitialShowDelay="0" Width="24" Height="24" Panel.ZIndex="1" 
                                       ToolTip="Овен (Aries)" Source="pack://application:,,,/Astro;component/Images/Aries.png">
                                        </Image>
                                    </Grid>
                                </local:Pie>
...
Рейтинг: 0 / 0
cannot add content to an object of type Pie
    #38838138
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полагаю, объявить dependency properties для всех свойств, к которым планируется binding (snippet с названием propdp из стандартных), задать ContentPropertyAttribute для класса Pie.
...
Рейтинг: 0 / 0
cannot add content to an object of type Pie
    #38838160
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ilya81,

Сделал так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
 [ContentProperty("Children")]
    public sealed class Pie : Shape
    {
public static readonly DependencyPropertyKey ChildrenProperty = DependencyProperty.RegisterReadOnly(
                    "Children",
                    typeof(UIElementCollection),
                    typeof(Pie),
                    new PropertyMetadata());

        public UIElementCollection Children
        {
            get { return (UIElementCollection)GetValue(ChildrenProperty.DependencyProperty); }
            private set { SetValue(ChildrenProperty, value); }
        }

        public Pie()
        {
            Children = new UIElementCollection(this, this);
        }

       public static Point ComputeCartesianCoordinate(double angle, double radius)
        {
            // convert to radians
            double angleRad = (Math.PI / 180.0) * (angle - 90);

            double x = radius * Math.Cos(angleRad);
            double y = radius * Math.Sin(angleRad);

            return new Point(x, y);
        }

        protected override Geometry DefiningGeometry
        {
            get
            {
                StreamGeometry geometry = new StreamGeometry();
                geometry.FillRule = FillRule.EvenOdd;

                using (StreamGeometryContext context = geometry.Open())
                {
                    DrawGeometry(context);
                }

                geometry.Freeze();

                return geometry;
            }
        }

        private void DrawGeometry(StreamGeometryContext context)
        {
            Point startPoint = new Point(CentreX, CentreY);

            Point outerArcStartPoint = ComputeCartesianCoordinate(Rotation, Radius);
            outerArcStartPoint.Offset(CentreX, CentreY);

            Point outerArcEndPoint = ComputeCartesianCoordinate(Rotation + AnglePie, Radius);
            outerArcEndPoint.Offset(CentreX, CentreY);

            bool largeArc = AnglePie > 180.0;
            Size outerArcSize = new Size(Radius, Radius);

            context.BeginFigure(startPoint, true, true);
            context.LineTo(outerArcStartPoint, true, true);
            context.ArcTo(outerArcEndPoint, outerArcSize, 0, largeArc, SweepDirection.Clockwise, true, true);
        }

    }




Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<local:Pie x:Name="piece1"
                                           CentreX="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Radius}" 
                                           CentreY="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Radius}" 
                                           Radius="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Radius}" 
                                           AnglePie="30"  Rotation="{Binding Path=Angel}">
                                        <Image RenderTransformOrigin=".5 .5" ToolTipService.InitialShowDelay="0" Width="24" Height="24" Panel.ZIndex="1" 
                                                ToolTip="Овен (Aries)" Source="pack://application:,,,/Astro;component/Images/Aries.png">
                                        </Image>
                                </local:Pie>



Все работает, но картинка не рисуется. Как-то по-другому надо делать или я что-то забыл?
...
Рейтинг: 0 / 0
cannot add content to an object of type Pie
    #38838163
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pavluha,

Картинка я имею в виду сам Image. Pie рисуется
...
Рейтинг: 0 / 0
cannot add content to an object of type Pie
    #38838368
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вывести вложенный control в классе, наследуемом от Shape, возможно лишь достаточно извращённым способом. Класс Shape предназначен для базовых элементов, т. е. не имеющих template'а и рисующих своё представление в методе OnRender. Так что если нужна просто картинка внутри, то создавайте своё свойство ImageSource, создавайте BitmapImage и выводите его в DrawingContext метода OnRender. Если ж картинку нужно задать классом Image, то без Template'а не обойтись, в него тогда нужно включить, например, ContentPresenter, который выведет то, что внутри. Во втором случае, естественно, наследовать надо как минимум от класса Control.
...
Рейтинг: 0 / 0
cannot add content to an object of type Pie
    #38853140
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ilya81,

А можно немного поподробнее, не очень понимаю?
Сам класс Pie реализован, так чтобы рисовать сектор.
Если можно как-то по-другому рисовать было бы супер. Я сам данный пример нашел на просторах инета и взял, как есть добавив мне необходимые свойства.
...
Рейтинг: 0 / 0
cannot add content to an object of type Pie
    #38853255
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если большая часть функционала уже есть, то проще всего добавить переопределение MeasureOverride и ArrangeOverride. Одно из их описаний здесь . Без вызова метода Measure control'ы могут вообще не выводиться.
...
Рейтинг: 0 / 0
cannot add content to an object of type Pie
    #38855163
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ilya81,

Я что-то вообще не могу понять, как методы вычисления размеров помогут мне с отображение?
Вы имеете в виду, что мой image сейчас не имеет размера?
...
Рейтинг: 0 / 0
cannot add content to an object of type Pie
    #38855416
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ilya81,

если не вызывать метод Measure, то у размещаемого объекта свойство DiseredSize будет 0,0, но это совершенно не мешает разместить его в методе ArrangeOverride и он должен нормально отобразиться.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / cannot add content to an object of type Pie
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]