2016-02-04 6 views
0

В настоящее время я пытаюсь создать миникарту (которая обновляется в реальном времени (30 + fps)), используя холст WPF с различными фигурами, нарисованными на нем. Теперь моя проблема в том, что каждый из этих объектов имеет фиксированную координату, которую я не могу изменить, и мне нужен холст, чтобы сосредоточиться на одном из них.Центрирование холста WPF на элементе

В принципе, мне нужен способ сдвинуть начало/представление холста. (Или лучше альтернативы делать что-то вроде миникарты)

ответ

1

Вы можете использовать транслим-преобразование:

<Canvas Height="400" Width="400" Name="MinimapCanvas"> 
    <Rectangle Width="200" Height="200"/> 
    <Canvas.RenderTransform> 
    <TranslateTransform X="100" Y="100"/> 
    </Canvas.RenderTransform> 
</Canvas> 

Для каждого обновления вы должны вычислить точные значения для преобразований - Somthing вроде:

public partial class MainWindow : Window 
{ 
    private TranslateTransform transformation; 

    public MainWindow() 
    { 
     InitializeComponent(); 

     transformation = new TranslateTransform(0,0); 
     MinimapCanvas.RenderTransform = transformation; 
    } 

    private void TimerTick() 
    { 
     //TODO: calculation 
     transformation.X = 42; 
     transformation.Y = 20; 
    } 
} 

Редактировать: Фактически, я использовал две возможности. Объявление трансформации в xaml и в коде. Вы можете либо опустить часть xaml, либо передать свой xaml-преобразование идентификатор через x: Name и напрямую изменить его свойства ...

+0

Работает отлично, но, возможно, я должен добавить, что мне нужно преобразовать в отрицательные значения, чтобы сместить его к моим объектам в положительном пространстве – Chester

+0

Так что в моем случае это Transform.X = -so.Position_X; Transform.Y = -so.Position_Y; – Chester

Смежные вопросы