WPF Canvas Желаемый размер - PullRequest
       9

WPF Canvas Желаемый размер

0 голосов
/ 16 декабря 2011

У меня есть следующий элемент управления:

<UserControl x:Class="FooBar.AnnotationControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="400" Width="500" >
    <ScrollViewer Height="400" Width="500">
        <Canvas Height="400" Width="500" Name="ctlCanvas" MouseLeftButtonDown="MouseLeftButtonDownHandler" MouseWheel="Canvas_MouseWheel" >
            <Canvas.RenderTransform>
                <ScaleTransform x:Name="ZoomTransform" />
            </Canvas.RenderTransform>
        </Canvas>
    </ScrollViewer>
</UserControl>

namespace FooBar
{

    public partial class AnnotationControl : UserControl
    {
        public AnnotationControl()
        {
            InitializeComponent();

        }

        private void MouseLeftButtonDownHandler( object sender, MouseButtonEventArgs args)
        {
           //Do Something
        }
        private void Canvas_MouseWheel(object sender, MouseWheelEventArgs e)
        {

            ctlCanvas.Measure(new Size(ctlCanvas.ActualWidth * ZoomTransform.ScaleX, ctlCanvas.ActualHeight * ZoomTransform.ScaleY));
        }
    }

}

Я пытаюсь заставить зрителя прокрутки реагировать на масштабирование холста. Вызов Canvas.Measure не изменяет желаемый размер холста. Есть идеи, что здесь происходит?

Ответы [ 3 ]

1 голос
/ 16 декабря 2011

Вы НЕ должны вызывать Measure самостоятельно.Этот метод должен вызываться на шаге макета, а не где-то еще.Также RenderTransform не меняет ваш размер.RenderTransform применяется ПОСЛЕ фактического размещения макета.Таким образом, у вас есть средство прокрутки, которому не нужно прокручивать содержимое, потому что оно того же размераЧто вам может понадобиться, это LayoutTransform.

0 голосов
/ 16 декабря 2011

Хорошо, похоже, я нашел решение.Похоже, я могу обернуть свой холст другим холстом, и когда я масштабирую его, я просто устанавливаю высоту и ширину для внешнего холста = начальная высота и ширина, умноженные на текущие масштабы X и Y ScaleTransform.

0 голосов
/ 16 декабря 2011

Canvas - самый примитивный элемент, и он просто не предназначен для работы с ScrollViewer. Вместо этого используйте Grid / StackPanel / WarPanel / UniformGrid.

...