2009-08-26 1 views
0

Я пишу приложение, которое создает графический «циферблат», как часы. Каждый элемент на циферблате создается, а затем добавляется на циферблат по часовой стрелке - представьте себе создание одного элемента с часом 1, который включает в себя минутные штрихи, число «1» и другие укутывания, рисование, затем повторение на час 2, и т. Д.WPF 2d Графика и преобразование группы в C#

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

Спасибо за любую помощь.

ответ

1

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

i.e. Чтобы преобразовать все в сетку на 45 градусов, это будет выглядеть в XAML;

<Grid x:Name="LayoutRoot" RenderTransformOrigin="0.5,0.5"> 
     <Grid.RenderTransform> 
      <TransformGroup> 
       <ScaleTransform/> 
       <SkewTransform/> 
       <RotateTransform Angle="45"/> 
       <TranslateTransform/> 
      </TransformGroup> 
     </Grid.RenderTransform> 
     <Rectangle Fill="White" Stroke="Black" Margin="198,161,265,196"/> 
    </Grid> 

Этот пример содержит только один прямоугольник на границе, но концепция абсолютно одинакова, независимо от того, сколько объектов включено.

Для регулировки вращения последнего через C#, то вы можете использовать следующие, который будет вращать сетку на 90 градусов:

RotateTransform aRT = new RotateTransform(90); 
this.LayoutRoot.RenderTransform = aRT; 
+0

Привет, спасибо за ответ, вы можете помочь в дальнейшем? Я хотел бы знать, как это сделать в C#, так как количество элементов в моем циферблате является переменной. Должен ли я просто создать новую сетку для каждого нового элемента, а затем преобразовать каждый из них при создании? Кроме того, циферблат доступен для редактирования, который может добавлять новые элементы, удалять их и т. Д., И каждый раз, когда циферблат модифицируется, его нужно будет перерисовать, поэтому я предполагаю, что для каждого элемента мне придется. .. – Will

+0

- динамически создать новую сетку - добавить графику к нему - нарисовать его - быть в состоянии уничтожить его и перерисовывать весь диск , так как я не знаю, сколько элементов будет в моем циферблате, потому что они создаются пользователем во время выполнения, я не могу создавать сетки с именованной переменной, но если сетка не называется, как ее удалить позже? спасибо, Воля. – Will