2009-05-25 1 views
17

Я получаю XAML-blind, я боюсь. Я разрабатываю приложение MS Surface, и у меня есть эллипс внутри ScatterViewItem (контейнер, который конечный пользователь может изменять размер). Я хотел бы сохранить эллипс круг (ширина == высота) и держать его как можно большим (минимальное значение ширины/высоты SVI должно приниматься как для свойств ширины, так и для высоты эллипса).В XAML, как я могу сохранить эллипс, являющийся кругом?

Предпочтительно использовать только решение XAML (используя триггеры свойств или аналогичные).

Ваша помощь очень ценится, как всегда.

ответ

15

Может ли простой Viewbox сделать трюк? Например.

<Viewbox xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    HorizontalAlignment="Center" 
    VerticalAlignment="Center"> 
    <Canvas Width="100" Height="100"> 
     <Ellipse Fill="Red" Width="100" Height="100" /> 
    </Canvas> 
</Viewbox> 

Viewbox масштабирует его содержимое, чтобы заполнить область Viewbox, и по умолчанию делает масштабирование пропорционально. Указанные горизонтальные и вертикальные выравнивания сохраняют Ellipse по центру, если его невозможно растянуть до полного размера (из-за пропорционального масштабирования).

+1

Briljant! Briljant (мне нужно, по крайней мере, 15 символов) –

5
<Ellipse x:Name="anEllipse" Width={Binding Path=ActualHeight ElementName=anEllipse} /> 

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

+2

Что делать, если высота ограничивающей рамки больше ширины? В этом случае я хочу Height = ActualWidth. –

+0

В этом случае вам нужно написать код, чтобы сделать это - то есть вы хотите сделать жадный размер, который поддерживает соотношение сторон (вроде того, как это делает игрок в кино, который переключает ту сторону, на которой он основывает свои размеры, на основе какой оси больше) –

+0

Вот что я подумал. Жаль, но проблем нет. Спасибо –

28

я споткнулся этот вопрос несколько минут назад и нашел гораздо лучшее решение, чем @Paul Беттс (я бы прокомментировать свой ответ, если бы я мог, но я не могу)

Вы можете просто использовать <Ellipse Stretch="Uniform" /> чтобы получить круг.

http://forums.silverlight.net/t/160615.aspx

+2

Это лучшее решение на сегодняшний день. – flyingfisch

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