Расположение элемента WPF на холсте - PullRequest
2 голосов
/ 10 сентября 2010

У меня на холсте есть точка, которую я хочу поместить в эллипс. Я хочу, чтобы центр эллипса находился над этой точкой. В данный момент верхний левый край эллипса находится над этой точкой.

Я знаю, что могу программно переместить эллипс на холсте, но мне было интересно, есть ли способ указать WPF центрировать элемент по точке, а не изменять его размер слева сверху ???

Ответы [ 4 ]

7 голосов
/ 10 сентября 2010

Я не знаю ни одной встроенной функции в Ellipse, чтобы установить ее центр на точку, но вы можете расширить класс Ellipse, чтобы сделать это.

Добавить этот класс в проект

public static class EllipseX 
{
    public static void SetCenter(this Ellipse ellipse, double X, double Y)
    {
        Canvas.SetTop(ellipse, Y - ellipse.Height/2);
        Canvas.SetLeft(ellipse, X - ellipse.Width/2);
    }
}

Затем в xaml создайте Эллипс

<Window x:Class="WpfApplication2.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
   <Canvas Background="LightGray">
      <Ellipse      
          Name="myEllipse"      
          Fill="Red"
          Height="75"
          Width="75"
       />
   </Canvas>
</Window>

Затем напишите int следующий код в коде:

myEllipse.SetCenter(200,200);

Преимущество этого в том, что вам не нужно повторять логику нахождения центра в каждом создаваемом вами эллипсе.

Надеюсь, это поможет.

0 голосов
/ 10 сентября 2010

У меня была похожая проблема при настройке Центра ScaleTransform в стиле элементов управления разных размеров. Закончилось использование конвертера для привязки к ActualWidth / ActualHeight, разделенному на 2. То же самое должно работать для вас с TranslateTransform, как упомянул Руне Гримстад.

<ScaleTransform CenterX="{Binding ActualWidth, Converter={StaticResource divisionConverter}}"
                CenterY="{Binding ActualHeight, Converter={StaticResource divisionConverter}}"
                ScaleX="1.2"
                ScaleY="1.2" />
0 голосов
/ 10 сентября 2010

Вы можете применить TranslateTransform к эллипсу, но для этого необходимо знать его ширину и высоту.

0 голосов
/ 10 сентября 2010

Нет, такого способа нет. Верхний левый верхний левый, потому что верхний левый :). В качестве альтернативы, вместо смещения эллипса вы можете сместить точку, если вы знаете размеры эллипса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...