У меня есть какое-то фундаментальное недопонимание того, как мне следует подходить к этой проблеме.
У меня есть Canvas внутри ScrollViewer.Я хотел бы иметь возможность увеличивать и уменьшать масштаб этого Canvas и настроить ScrollViewer соответствующим образом.
Вот код:
XAML:
<Window x:Class="scrollerProblem.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<ScrollViewer Name="scroller" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<Canvas Background="AntiqueWhite" Name="content" MouseLeftButtonDown="content_MouseLeftButtonDown" MouseRightButtonDown="content_MouseRightButtonDown">
<Rectangle Width="100" Height="100" Canvas.Top="50" Canvas.Left="50" Fill="PaleGoldenrod"></Rectangle>
</Canvas>
</ScrollViewer>
</Window>
Иcodebehind:
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
namespace scrollerProblem
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
float Zoom = 1;
public Window1()
{
InitializeComponent();
content.Width = 700;
content.Height = 700;
}
private void content_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
content.Width *= 2; // BLAH
content.Height *= 2; // BLAH
Zoom *= 2;
TransformGroup gridTransforms = new TransformGroup();
gridTransforms.Children.Add(new ScaleTransform(Zoom, Zoom));
gridTransforms.Children.Add(new TranslateTransform(0, 0));
content.RenderTransform = gridTransforms;
}
private void content_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
content.Width /= 2; // BLAH
content.Height /= 2; // BLAH
Zoom /= 2;
TransformGroup gridTransforms = new TransformGroup();
gridTransforms.Children.Add(new ScaleTransform(Zoom, Zoom));
gridTransforms.Children.Add(new TranslateTransform(0, 0));
content.RenderTransform = gridTransforms;
}
}
}
Если я пропущу строки, помеченные "BLAH", полосы прокрутки вообще не изменятся ... что не слишком удивительно, поскольку на самом деле ничто не меняет размерсодержание холста.Однако, если я добавлю строки BLAH, холст сжимается / увеличивается, но в то же время он масштабируется, что означает, что он выглядит неправильно по сравнению с его содержимым.
Я предполагаю, что яЯ использую некорректный подход, но я не понимаю, как его решить.Это правильный путь, с небольшой проблемой, или я принимаю совершенно неправильный такт?