2014-01-07 4 views
2

Если у меня есть контроль, как это:Изменение WPF сетки, чтобы иметь начало в левом нижнем углу

<Grid ShowGridLines="True"> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition/> 
    <ColumnDefinition/> 
    <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
    <RowDefinition/> 
    <RowDefinition/> 
    <RowDefinition/> 
    </Grid.RowDefinitions> 

    <TextBlock Grid.Column="0" Grid.Row="0" Text="One, One" /> 
    <TextBlock Grid.Column="0" Grid.Row="1" Text="One, Two" /> 
    <TextBlock Grid.Column="0" Grid.Row="2" Text="One, Three" /> 
    <TextBlock Grid.Column="1" Grid.Row="0" Text="Two, One" /> 
    <TextBlock Grid.Column="1" Grid.Row="1" Text="Two, Two" /> 
    <TextBlock Grid.Column="1" Grid.Row="2" Text="Two, Three" /> 
    <TextBlock Grid.Column="2" Grid.Row="0" Text="Three, One" /> 
    <TextBlock Grid.Column="2" Grid.Row="1" Text="Three, Two" /> 
    <TextBlock Grid.Column="2" Grid.Row="2" Text="Three, Three" /> 
</Grid> 

я получить сетку, которая выглядит следующим образом:

___________________________________________ 
| One, One | Two, One | Three, One | 
------------------------------------------- 
| One, Two | Two, Two | Three, Two | 
------------------------------------------- 
| One, Three | Two, Three | Three, Three | 
------------------------------------------- 

Есть что я могу сделать (сокр изменения все мои Grid.Column и Grid.Row настройки), чтобы получить эту сетку, чтобы показать, как это:

___________________________________________ 
| One, Three | Two, Three | Three, Three | 
------------------------------------------- 
| One, Two | Two, Two | Three, Two | 
------------------------------------------- 
| One, One | Two, One | Three, One | 
------------------------------------------- 

В основном я хочу изменить точку начала координат из левого верхнего угла в левый нижний угол.

(Примечание. Мой реальный сценарий имеет 42 х 30 сетку с большим количеством визуальных компонентов, привязанных к сетке (по строке, столбец и пролеты) Этот вопрос моей попытка избежать преобразований моих связанные данных вручную.)

ответ

4

Вы можете сделать это с преобразованиями макетов. РЕДАКТ. Упрощение преобразований как одно преобразование. Как выясняется, матрица tranformation для сетки совпадает, что для каждого текстового блока

Вот пример скриншот:

Example

<Grid ShowGridLines="True"> 
    <Grid.Resources> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Setter Property="LayoutTransform"> 
       <Setter.Value> 
        <MatrixTransform> 
         <MatrixTransform.Matrix> 
          <Matrix M11="1" M12="0" M21="0" M22="-1" /> 
         </MatrixTransform.Matrix> 
        </MatrixTransform> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Grid.Resources> 
    <Grid.LayoutTransform> 
     <MatrixTransform> 
      <MatrixTransform.Matrix> 
       <Matrix M11="1" M12="0" M21="0" M22="-1" /> 
      </MatrixTransform.Matrix> 
     </MatrixTransform> 
    </Grid.LayoutTransform> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition/> 
     <RowDefinition/> 
     <RowDefinition/> 
    </Grid.RowDefinitions> 

    <TextBlock Grid.Column="0" Grid.Row="0" Text="One, One"/> 
    <TextBlock Grid.Column="0" Grid.Row="1" Text="One, Two"/> 
    <TextBlock Grid.Column="0" Grid.Row="2" Text="One, Three"/> 
    <TextBlock Grid.Column="1" Grid.Row="0" Text="Two, One" /> 
    <TextBlock Grid.Column="1" Grid.Row="1" Text="Two, Two" /> 
    <TextBlock Grid.Column="1" Grid.Row="2" Text="Two, Three" /> 
    <TextBlock Grid.Column="2" Grid.Row="0" Text="Three, One" /> 
    <TextBlock Grid.Column="2" Grid.Row="1" Text="Three, Two" /> 
    <TextBlock Grid.Column="2" Grid.Row="2" Text="Three, Three" /> 
</Grid> 
+1

Очень приятно! Спасибо! – Vaccano

+0

Это было весело! Мой интуитивный инстинкт был невозможным, и я почти написал это. Тогда решил провести какое-то исследование и получил возможность применить некоторую линейную алгебру, чтобы заставить ее работать :) – DLeh

+0

Прохладный материал ..... –

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