Для чего нужен ScaleTransform? - PullRequest
3 голосов
/ 15 июля 2011

почему я должен использовать ScaleX = "2", например, вместо двойной ширины моего элемента управления?

<Button Width = "100" Content="Button1"/>


<Button Width = "50" Content="Button2">
   <Button.RenderTransform>
      <ScaleTransform ScaleX="2" />
   </Button.RenderTransform>
</Button>

обе кнопки выглядят одинаково, так что опять же, какой масштаб хорош для

Ответы [ 3 ]

3 голосов
/ 15 июля 2011

Ваша концепция "точно такой же" , похоже, отличается от моей.

Screenshot

Размеры, указанные вами с помощью Width и Height, влияют на то, сколько места занимает элемент управления в макете, это означает, что элемент управления может занимать больше или меньше места, но, например, размер шрифта останется неизменным. RenderTransform является манипуляцией над этим, которая больше не касается макета и, следовательно, может исказить элемент управления.

Преобразование рендеринга не восстанавливает размер макета или размер рендера Информация. Преобразования рендера обычно предназначены для анимации или применение временного эффекта к элементу. Например, элемент может увеличиваться при фокусировке или наведении, или может дрожать при обрати внимание на эту часть пользовательского интерфейса (UI).


См. Также свойство LayoutTransform, которое влияет на макет, но по-прежнему искажает элемент управления.

2 голосов
/ 15 июля 2011

Что если бы это было сложнее, чем кнопка с шириной?Что если у вас был сложный путь / геометрия или, может быть, даже группа элементов управления?Вы не хотели бы пойти и вручную изменить все.Что если у вас есть пользовательский элемент управления, в котором вы хотите указать один экземпляр размером 100x100, а другой экземпляр 150x150?Что, если вы реализуете функцию масштабирования (например, карты Google)?

Короче говоря, для вашего конкретного примера это не дает большого использования.Но есть много других случаев, когда это происходит.

2 голосов
/ 15 июля 2011

Это полезно, когда у вас нет возможности масштабировать некоторые части элемента управления.Рассмотрим элемент управления DatePicker.Реализация по умолчанию имеет выпадающий календарь, который был слишком мал для моих пользователей, поэтому я добавил этот фрагмент XAML в свой файл App.xaml:

<Style TargetType="w:DatePicker">
    <Setter Property="CalendarStyle">
        <Setter.Value>
            <Style TargetType="w:Calendar">
                <Setter Property="LayoutTransform">
                    <Setter.Value>
                        <ScaleTransform ScaleX="1.5" ScaleY="1.5" />
                    </Setter.Value>
                </Setter>
            </Style>
        </Setter.Value>
    </Setter>
</Style>

Теперь календарь в 1,5 раза большеи мои пользователи счастливы.Нет свойства CalendarWidth или CalendarHeight, которое я мог бы установить напрямую, поэтому ScaleTransform сохранил день.

...