2015-08-11 5 views
0

После некоторого расследования я все еще не могу найти способ изменить источник управления. Итак, я хочу просто разместить один квадрат в центре другого квадрата без полей, поэтому он будет полностью независим от первого квадратного размера.Начальная точка управления WPF

Теоретически, это может быть легко сделано с HorizontalAlignment и VerticalAlignment набор для Center, так как он автоматически устанавливает Margin контроля до половины ширины и высоты родительского контроля. Но это не так просто. Простейший способ описать проблему следующий снимок Example

Как видите, маржа подсчитывается в верхнем левом углу. Это то, что я называю происхождением. Идеальное решение - изменить его на центр первого квадрата, но здесь мне нужна помощь - как я могу это сделать?

+1

Вы можете показать код или xaml, который иллюстрирует проблему? Является ли край внутреннего квадрата = 0? – Sam

+0

@Sam, я не могу использовать поля, так как они зависят от разности квадратов. Я хочу найти способ сделать квадрат любого размера размещенным прямо внутри центра другого квадрата, используя только инструменты xaml. Я приведу пример кода ASAP – lentinant

ответ

0

Ну, это было довольно странно. Данное поведение можно увидеть только при использовании Image и выравнивания Center. Может быть разрешено либо обертыванием Image в Grid, которое будет использовать выравнивание Center, либо с помощью Stretch выравнивание с Image (что намного проще).

<Grid Width="500" Height="500"> 
    <Image Width="250" Height="250" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/> 
</Grid> 

Если вы хотите воспроизвести проблему, которую я описал в вопросе, замените Stretch с Center в коде выше.

+0

это схватывание на соломинках, но попытайтесь явно установить маржу, ширину границы, отступы, до нуля – Sam

+0

Код выше - это реальное решение, поэтому мне не нужны никакие обходные пути. – lentinant

0

Вероятно, упрощает здесь, но я бы просто использовать сетку, чтобы обернуть эти два пункта вы упомянули, как в этом примере (один натянутого, чтобы соответствовать и один по центру):

<Grid> 
    <Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderBrush="Black" BorderThickness="10" Margin="4"/> 
    <Button HorizontalAlignment="Center" VerticalAlignment="Center" Padding="10">InnerButton</Button> 
</Grid> 
+0

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

+0

:-) Просто часть бокового мышления, чтобы достичь того, что вам казалось нужным. Часто его проще использовать сетку для организации размещения управления и использовать порядок элементов управления в XAML, чтобы что-то появилось в чем-то другом, а не на самом деле помещать что-то в нечто другое. Если вы категоричны, что нужно быть в другом, тогда просто игнорируйте ответ - просто пытайтесь помочь (или нет, как в этом случае, но, я думаю, я неправильно понял ваше первоначальное намерение!) – Wulfy

2

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

Верхняя, левая (при использовании кавы) и маржа (при использовании сетки) помогают регулировать «автоматическое» размещение с помощью родительского элемента управления, а это, в свою очередь, определяет, где точка начала для контроля заканчивается относительно родительский элемент управления. Затем объект преобразования смещает RELATIVE к тому месту, в котором эта точка происхождения.

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

Например, прикрепите тот же объект преобразования к двум элементам управления и задайте их происхождение отдельно, а затем примените анимацию к объекту преобразования - оба элемента управления будут анимировать один объект анимации (если вы хотите, чтобы их перемещение в идеальной синхронизации).

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