Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / canvas перевернуть ось y / 7 сообщений из 7, страница 1 из 1
08.11.2017, 18:08
    #39549808
Nechto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
canvas перевернуть ось y
Здравствуйте!

Подскажите пожалуйста как нужно настроить контрол 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
08.11.2017, 19:22
    #39549844
Nechto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
canvas перевернуть ось y
Вроде нашел решение. Завтра буду проверять.



Так
Код: 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
08.11.2017, 19:53
    #39549860
Nechto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
canvas перевернуть ось y
Думал получилось, а оказалось нет. Точки перенеслись, а вот подписи теперь перевернутые.
...
Рейтинг: 0 / 0
08.11.2017, 21:57
    #39549913
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
canvas перевернуть ось y
Создайте свой класс, наследуйте Canvas, переопределите метод Range.
Но есть один вопрос, можно транслировать все координаты как Высота - y.
Тогда Top = 0 будет находится снизу, но сами элементы это не как не развернет.
То есть элемент размером 200 на 200, будет внизу только если его Top будет равен 200, если он будьте равен 0, то он будет находится в не области видимости, то есть снизу.

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

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



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


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