Почему ActualWidth и ActualHeight начинаются с 0,0? - PullRequest
6 голосов
/ 05 января 2011

Я хочу добавить путь WPF к InkCanvas и использовать выбор для выбора пути WPF.Итак, я использую этот код.

System.Windows.Shapes.Path path = drawCanvas.Children[i] as System.Windows.Shapes.Path;    
drawCanvas.Children.RemoveAt(i);
inkCanvas.Children.Add(path);

Это вывод.Я должен выбрать WPF Path от 0,0, потому что Actualwidth и ActualHeight начинаются с 0,0.

alt text

Как выбрать абсолютный путь WPF?

Спасибо

Редактировать:

Теперь я могу выбрать его абсолютно с помощью этого кода.

System.Windows.Shapes.Path path = drawCanvas.Children[i] as System.Windows.Shapes.Path;
drawCanvas.Children.RemoveAt(i);
path.Margin = new Thickness(-getMinX(path), -getMinY(path), 0, 0);
containPath.Children.Add(path);
containPath.Width = getMaxX(path) - getMinX(path);
containPath.Height = getMaxY(path) - getMinY(path);
containPath.Margin = new Thickness(getMinX(path), getMinY(path), 0, 0);
inkCanvas.Children.Add(containPath);

Ответы [ 2 ]

4 голосов
/ 05 января 2011

Вы можете использовать метод UIElement.UpdateLayout в InkCanvas, чтобы обновить FrameworkElement.ActualWidth Свойство и ActualHeight. См. Ссылку ActualWidth для получения справочной информации о том, почему это необходимо.

Edit:

Я неправильно понял вопрос. Не то чтобы ActualWidth и ActualHeight были равны нулю, а что их значения были относительно (0, 0) на InkCanvas. Довольно хорошее решение проблемы - обернуть Path в Canvas и расположить его, используя Margin, например:

<Canvas Width="50" Height="50" Margin="200,200,0,0">
    <Line
        X1="0" Y1="0"
        X2="50" Y2="50"
        Stroke="Black"
        StrokeThickness="4" />
</Canvas>

, который ведет себя как:

alt text

Недостатком этого подхода является то, что пользователь должен лассо Canvas, который является прямоугольником, а не произвольной формы. Тем не менее, это намного лучше, чем лассо объекта и источника.

0 голосов
/ 05 января 2011

Для элементов, которые могут быть определены только через контрольные точки (например, Линия, Путь и т. Д. По сравнению с Прямоугольником, Эллипсом и т. Д.), Когда вы добавляете его в элемент управления элементами (который, как я полагаю, InkCanvas, так как поддерживает выбор) холст добавляется на панель в 0,0. Ширина и Height холста определяются из максимальных координат X и Y контрольных точек. После этого элемент добавляется как дочерний элемент этого холста.

Вы также увидите, что всякий раз, когда вы видите такое поведение с элементом, элемент не будет поддерживать свойства макета, такие как горизонтальное / вертикальное выравнивание и т. Д.

Единственный способ обойти это - найти ActualWidth и ActualHeight вручную по координатам пути.

Редактировать: Это из личного опыта, а не из какой-либо документации.

...