powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как рассчитать положение TextBlock на круге
3 сообщений из 3, страница 1 из 1
Как рассчитать положение TextBlock на круге
    #38859287
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть TextBlock:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
                            <TextBlock Text="I" FontSize="12" VerticalAlignment="Top" HorizontalAlignment="Left" Background="Black"
                                       FontFamily="Technical Italic, Comic Sans MS, Arial" Panel.ZIndex="4">
                                <TextBlock.RenderTransform>
                                    <TransformGroup>
                                        <RotateTransform Angle="{Binding Path=Angle, Converter={StaticResource AngleConverter}}"></RotateTransform>
                                        <TranslateTransform>
                                            <TranslateTransform.X>
                                                <MultiBinding Converter="{StaticResource XLineCoordConverterSign}" ConverterParameter="0">
                                                    <Binding Path="Radius"/>
                                                    <Binding Path="House1"/>
                                                    <Binding Path="House1"/>
                                                </MultiBinding>
                                            </TranslateTransform.X>
                                            <TranslateTransform.Y>
                                                <MultiBinding Converter="{StaticResource YLineCoordConverterSign}" ConverterParameter="0">
                                                    <Binding Path="Radius"/>
                                                    <Binding Path="House1"/>
                                                    <Binding Path="House1"/>
                                                </MultiBinding>
                                            </TranslateTransform.Y>
                                        </TranslateTransform>
                                    </TransformGroup>
                                </TextBlock.RenderTransform>
                            </TextBlock>



Код: 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.
    public class XLineCoordConverterSign : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (values.Length == 3)
            {
                double radius = (double)values[0];
                double angle = (double)values[2];
                double house1 = (double)values[1];
                if (house1 > angle)
                    angle += 360;

                var num = Int32.Parse(parameter.ToString());
                var a = (angle + 30 * num) % 360;
                a = angle - house1;

                return radius + radius * Math.Cos(a * (Math.PI / 180.0));
            }

            return DependencyProperty.UnsetValue;
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }



Положение на круге рассчитывается правильно, но как мне теперь рассчитать смещение чтобы центр блока был на этой точке.
Сейчас это всегда левый верхний угол. Я подумал рассчитать высоту блока, но как ее получить в конвертере ума не приложу.
Да и не очень это поможет, потому что на круге в некоторых случаях надо смотреть высоту, где-то ширину, а где-то и то и другое.
...
Рейтинг: 0 / 0
Как рассчитать положение TextBlock на круге
    #38859316
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал так, но всегда UnsetValue
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
                                                 <MultiBinding Converter="{StaticResource XLineCoordConverterSign}" ConverterParameter="0">
                                                    <Binding Path="Radius"/>
                                                    <Binding Path="House1"/>
                                                    <Binding Path="House1"/>
                                                    <Binding Path="FontFamily" RelativeSource="{RelativeSource Self}" UpdateSourceTrigger="PropertyChanged"/>
                                                    <Binding Path="FontSize" RelativeSource="{RelativeSource Self}" UpdateSourceTrigger="PropertyChanged"/>
                                                    <Binding Path="Text" RelativeSource="{RelativeSource Self}" UpdateSourceTrigger="PropertyChanged"/>
                                                </MultiBinding>
...
Рейтинг: 0 / 0
Как рассчитать положение TextBlock на круге
    #38859587
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос снят:

Решение:
Код: c#
1.
  <Binding Path="FontFamily" RelativeSource="{RelativeSource AncestorType=TextBlock}"/>



Когда Self он на TranslateTransform биндит.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как рассчитать положение TextBlock на круге
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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