Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RadialGradientBrush 
V
    Опции темы
Idsa
Дата 19.6.2008, 03:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 2
Всего: 62



В ходе исследования класса RadialGradientBrush написал следующее окно:
Код

<Window x:Class="WpfApplication2.Window2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window2" Height="300" Width="300">

    <Rectangle Width="150" Height="100">
        <Rectangle.Fill>
            <RadialGradientBrush Center="0.5, 0.5" GradientOrigin="0, 0.5" RadiusX="0.3" RadiusY="0.3">
                <GradientStop Color="White" Offset="0"></GradientStop>
                <GradientStop Color="Black" Offset="1"></GradientStop>
            </RadialGradientBrush>
        </Rectangle.Fill>
    </Rectangle>

</Window>

Обратите внимание, что здесь GradientOrigin не просто смещен, он вообще находится за пределами круга Center-RadiusX.
Итоговый градиент показался мне нелогичным.
Не понимаю принцип построения этого градиента, в частности, почему градиент выходит за рамки круга Center-RadiusX. Я так понял, что GradientOrigin всего лишь логический центр... а получается несколько иначе.

Все еще более запутывается, если добавить к градиенту SpreadMethod="Repeat".

P. S. Интересно, а что побудило разработчиков WPF радиусы мерять не относительно ширины и высоты, а относительно длины диагонали?

Это сообщение отредактировал(а) Idsa - 19.6.2008, 03:20


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Kefir
Дата 19.6.2008, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 22
Всего: 87



гм. ну в общем, если представить себе фонарик в роли источника "освещения" (заливки цвета), то Center, RadiusX и RadiusY определяют то место куда попадает цвет. GradientOrigin - это место, где находится фонарик. и собственно, в твоём примере очень хорошо видно , как цвет распространяется. ничего не обрезается по сути - заливка действует для всего прямоугольника. при SpreadMethod="Repeat" всё тоже в общем то логично. Когда круг заканчивается - градиент начинается с начала - то есть снова идёт белый, переходящий в чёрный.


Цитата(Idsa @  19.6.2008,  03:20 Найти цитируемый пост)
Интересно, а что побудило разработчиков WPF радиусы мерять не относительно ширины и высоты, а относительно длины диагонали?

почему ты так решил? поставь радиусы по 0.5 и увидишь, что круг будет вписан в прямоугольник, то есть будет касаться всех сторон прямоугольника.
PM MAIL WWW Skype   Вверх
Idsa
Дата 19.6.2008, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 2
Всего: 62



Kefir, спасибо. +1

Цитата(Kefir @  19.6.2008,  14:43 Найти цитируемый пост)
почему ты так решил? поставь радиусы по 0.5 и увидишь, что круг будет вписан в прямоугольник, то есть будет касаться всех сторон прямоугольника. 

Действительно, нормально работает. А я уж испугался smile. Меня смутил вот этот абзац в книге:
Цитата

The RadiusX and RadiusY determine the size of the limiting circle, and by default they're both set to 0.5. These values can be a bit unintuitive - they're measured in relation to the diagonal span of your fill area (the length of an imaginary line stretching from the top-left corner to the bottom-right corner of your fill area). That means a radius of 0.5 defines a circle that has a radius that's half the length of this diagonal. If you have a square fill region, you can use a dash of Pythagoras to calculate that this is about 0.7 times the width (or height) of your region. Thus, if you're filling a square region with the default settings, the gradient begins in the center and stretches to its outermose edge at about 0.7 times the width of the square.

Может, так было в бета-версии...


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0783 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.