hamid18 Ответов: 1

Работа масштабного преобразования в WPF


У меня есть холст. И на этом холсте я нарисовал два линейных объекта. В событии PreviewMouseWheel я масштабирую содержимое canvas через ScaleTransform. Предположим, что перед масштабированием линия начиналась с 0 и заканчивалась на 50.Затем следующая строка начиналась на 50 и заканчивалась на 70.Эти значения являются X кординатами двух линий. Я использую ScaleTransform и RenderTransform.
ScaleTransform scaleTransform = new ScaleTransform(scaleFacotr, 1);
canvas.RenderTransform = scaleTransform;

canvas.Width=initialCanvasWidth*scaleFacotr

Предполагать
scaleFacotr value is  2. We are multiplying x coordinate of  every point with 2 and multiply ycoordinate of every point  with 1. This thing I understand. I  want to confirm does it also mean the point on a line which was taking 1 pixel will now take 2 pixels along x axis

What I have tried:

<pre> <ItemsControl ItemsSource="{Binding Lines}">
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <Canvas  Height="12000" Margin="0,30,0,0"  Background="Transparent"  Name="front_canvas" ClipToBounds="True" 
                                    PreviewMouseWheel="OnPreviewMouseWheel"
                                      Width="{Binding CanvasWidth, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
                                      />
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>

                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Line   X1="{Binding From.X , Mode=TwoWay}" Y1="{Binding From.Y, Mode=TwoWay}" Stretch="None"
                            X2="{Binding To.X, Mode=TwoWay}" Y2="{Binding To.Y, Mode=TwoWay}" 
                            Stroke="OrangeRed" StrokeThickness="1" 
                            Loaded="Line_Loaded" />   
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>

                </ItemsControl>

1 Ответов

Рейтинг:
2

Gerry Schmitz

"Линии" имеют "толщину штриха"; это то, что управляет количеством пикселей / единиц устройства в "точке на линии".

"Толщина" - это то, что вы меняете, если хотите масштабировать иначе, чем x и y (и z).


hamid18

Это означает, что когда мы используем ScaleTransform и render transform на холсте, даже если линия становится больше по размеру в представлении. Тем не менее точки На линии занимают 1 пиксель, если я не изменяю толщину штриха.