powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / canvas перевернуть ось y
7 сообщений из 7, страница 1 из 1
canvas перевернуть ось y
    #39549808
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Подскажите пожалуйста как нужно настроить контрол canvas, чтобы изменить ось координат Y, с варианта I на вариант II?
Код: plaintext
1.
2.
3.
4.
5.
6.
 _ _ _ _ _ _  x             y                    
|                           |
|       I.                    |           II. 
|                           |       
|                           |_ _ _ _ _ _ _ _ x
y                           

Код: 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.
Вот мой пример:
using System.Collections.ObjectModel;
using System.Windows.Media;
using Point = System.Windows.Point;

namespace MapCanvas
{
    public class Class1
    {
        public ObservableCollection<PathGeometry> PathGeometry { get; set; }
        public ObservableCollection<PathData> PathData { get; set; }
        public Class1()
        {
            PathData = new ObservableCollection<PathData>
            {
                new PathData {Geometry = new LineGeometry(new Point(200, 100), new Point(115, 50)), Fill = Brushes.DarkGray, Stroke = Brushes.DarkGray, StrokeThickness = 1, IsLabel = false},
                new PathData {Geometry = new EllipseGeometry(new Point(200, 100), 3, 3), Fill = Brushes.Blue, Stroke = Brushes.Blue, StrokeThickness = 1, Label = "верхняя", IsLabel = true},
                new PathData {Geometry = new EllipseGeometry(new Point(115, 50), 3, 3), Fill = Brushes.Red, Stroke = Brushes.Red, StrokeThickness = 1, Label = "нижняя",  IsLabel = true},
            };
        }
    }

    public class PathData
    {
        public bool IsLabel { get; set; }
        public string Label { get; set; }
        public Geometry Geometry { get; set; }
        public Brush Fill { get; set; }
        public Brush Stroke { get; set; }
        public double StrokeThickness { get; set; }
    }
}


Код: 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.
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.
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mapCanvas="clr-namespace:MapCanvas"
        x:Class="MapCanvas.MainWindow"
        Title="MainWindow" x:Name="Page" WindowStartupLocation="CenterScreen" >
    <Window.DataContext>
        <mapCanvas:Class1/>
    </Window.DataContext>
    <Border HorizontalAlignment="Left" VerticalAlignment="Top">
        <Border.Background>
            <VisualBrush TileMode="Tile"
                             Viewport="0,0,30,30" ViewportUnits="Absolute" 
                             Viewbox="0,0,30,30" ViewboxUnits="Absolute">
                <VisualBrush.Visual>
                    <Rectangle Stroke="Darkgray" StrokeThickness="0.6" Height="30" Width="30" StrokeDashArray="3 1"/>
                </VisualBrush.Visual>
            </VisualBrush>
        </Border.Background>
        <ItemsControl ItemsSource="{Binding PathData}" Width="450" Height="225">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <Canvas>
                        <Canvas.RenderTransform>
                            <TransformGroup>
                                <!--<ScaleTransform ScaleX="1" ScaleY="-1"/>-->
                            </TransformGroup>
                        </Canvas.RenderTransform>
                    </Canvas>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid> <!--Margin="0,-225,0,0"-->
                        <Path Data="{Binding Geometry}" Fill="{Binding Fill}" Stroke="{Binding Stroke}" StrokeThickness="{Binding StrokeThickness}" StrokeDashArray="4 4" />
                        <Label Content="{Binding Label}" Margin="1,-12,0,0" Padding="0" FontSize="9" HorizontalAlignment="Left" VerticalAlignment="Top">
                            <Label.Style>
                                <Style TargetType="{x:Type Label}">
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding IsLabel}" Value="True">
                                            <Setter Property="Visibility" Value="Visible"/>
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding IsLabel}" Value="False">
                                            <Setter Property="Visibility" Value="Hidden"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Label.Style>
                            <Label.RenderTransform>
                                <TransformGroup>
                                    <TranslateTransform X="{Binding Geometry.Bounds.X}" Y="{Binding Geometry.Bounds.Y}"/>
                                </TransformGroup>
                            </Label.RenderTransform>
                        </Label>
                    </Grid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Border>
</Window>
...
Рейтинг: 0 / 0
canvas перевернуть ось y
    #39549844
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде нашел решение. Завтра буду проверять.



Так
Код: xml
1.
2.
3.
4.
5.
6.
7.
<TransformGroup>
       <ScaleTransform ScaleY="-1"/>
       <TranslateTransform
               X="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=Canvas}}"
               Y="{Binding ActualHeight, RelativeSource={RelativeSource AncestorType=Canvas}}"/>
       <ScaleTransform ScaleX="0.5" ScaleY="0.5"/>
</TransformGroup>


Или так
Код: xml
1.
2.
3.
4.
<TransformGroup>
       <ScaleTransform ScaleY="-1"/>
       <TranslateTransform Y="200" />
</TransformGroup>
...
Рейтинг: 0 / 0
canvas перевернуть ось y
    #39549860
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Думал получилось, а оказалось нет. Точки перенеслись, а вот подписи теперь перевернутые.
...
Рейтинг: 0 / 0
canvas перевернуть ось y
    #39549913
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создайте свой класс, наследуйте Canvas, переопределите метод Range.
Но есть один вопрос, можно транслировать все координаты как Высота - y.
Тогда Top = 0 будет находится снизу, но сами элементы это не как не развернет.
То есть элемент размером 200 на 200, будет внизу только если его Top будет равен 200, если он будьте равен 0, то он будет находится в не области видимости, то есть снизу.

Вам нужно, чтоб все координаты развернулись? и все элементы управления стали вниз головой кроме текста?
...
Рейтинг: 0 / 0
canvas перевернуть ось y
    #39549915
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если нужно позиционирование из левого нижнего угла, используйте свойство
Canvas.Bottom и Canvas.Left для позиционирования элементов управления.
...
Рейтинг: 0 / 0
canvas перевернуть ось y
    #39549988
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtesесли нужно позиционирование из левого нижнего угла, используйте свойство
Canvas.Bottom и Canvas.Left для позиционирования элементов управления.Да мне нужно позиционирование из левого нижнего угла.

Я не совсем понял путь решения, можете ещё разок объяснить? Мне нужно отойти от использования
Код: xml
1.
<Path Data="{Binding Geometry}" ...
...
Рейтинг: 0 / 0
canvas перевернуть ось y
    #39550090
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
<Canvas>
	<Border Canvas.Bottom="1" Canvas.Left="1"/>
</Canvas>



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


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