powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Масштабирование canvas
7 сообщений из 7, страница 1 из 1
Масштабирование canvas
    #38858406
Бабочка19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
Мне необходимо масштабировать канвас. Масштабирование срабатывает на событии прокрутки ролика мыши на канвасе.
Как можно сделать чтобы центрование было именно к курсору мыши на канвасе при помощи с помощью ScrollViewer?

вот xaml.
<Grid>
<ScrollViewer Name="scrollViewer" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible" Background="LightGray" Grid.Row="1">

<Canvas Height="400" Grid.Row="1" Background="AliceBlue" Name="cnv" HorizontalAlignment="Stretch" Margin="0" VerticalAlignment="Stretch" PreviewMouseWheel="canvas1_PreviewMouseWheel" />

</ScrollViewer >
</Grid>



код :
private ScaleTransform st = new ScaleTransform();
public MainWindow()
{
InitializeComponent();
cnv.LayoutTransform = st;
}
private void canvas1_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
coordinate_X = (e.GetPosition(cnv).X );

if (e.Delta > 0)
{
st.ScaleX *= 1.1;
}
if (e.Delta < 0)
{
st.ScaleX /= 1.1;

}

st.ScaleY = st.ScaleX;

}
...
Рейтинг: 0 / 0
Масштабирование canvas
    #38858409
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, мне кажется здесь больше подойдёт RenderTransform, ибо LayoutTransform тяжеловесный, подвисать будет при прокрутке (масштабировании). Или по каким-то причинам подходит только LayoutTransform? Да и какой здесь смысл в ScrollViewer? RenderTransform будет выполняться от центра.
...
Рейтинг: 0 / 0
Масштабирование canvas
    #38858460
Бабочка19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ilya81,
когда я использую RenderTransform а точнее CenterX = e.GetPosition(cnv).X и CenterY = e.GetPosition(cnv).Y то часть моего канваса слева визуально не отображается.
...
Рейтинг: 0 / 0
Масштабирование canvas
    #38858464
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Трансформация будет выполняться из точки UIElement.RenderTransformOrigin (тип Point) где 0,0 - верхний левый угол и 1,1 - правый нижний. Для маштабирования попробуйте Viewbox
...
Рейтинг: 0 / 0
Масштабирование canvas
    #38858573
Бабочка19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes,Ilya81,

Можете скинуть пример ?
...
Рейтинг: 0 / 0
Масштабирование canvas
    #38859497
Бабочка19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ilya81,

LayoutTransform при масштабировании объекта не может центровать к нужной точке.

RenderTransform центрует к нужной точке , но есть проблема.
При масштабировании канваса фактически его ширина и высота не меняется , но визуально меняются размеры! ScrollViewer при этом не увеличивает свою ширину и поэтому часть канваса не отображается и с помощью скрола пролистать не возможно.
...
Рейтинг: 0 / 0
Масштабирование canvas
    #38859507
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже несколькими сообщениями выше написано, о чём я забыл упомянуть - не ScrollViewer здесь нужен, а ViewBox.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Масштабирование canvas
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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