All streams
Search
Write a publication
Pull to refresh
2
0
Сергей @Colt045

Эникейщик

Send message

Более поздний вариант фотоаппарата на 72 кадра: Агат-18

Я правильно понял, что <Window.Style> - это что-то на авалонском и простой пролетарский WPF такое не понимает?

Как я уже выше писал, меня заинтересовал этот набор иконок (айконок?) и их применение.

Только я, как один известный большевик, пошел другим путем.

На скорую руку сделал небольшую программку, которая, на основе описания иконки, позволяет для каждого элемента «path» указать нужный цвет. После чего раскрашенный рисунок предоставляет в виде xaml-разметки, которую уже можно скопипастить в ресурсы. Копипаста выглядит как-то так (на примере «record2.svg»):

<Window.Resources>
    <Canvas x:Key="IconVer1" Width="16" Height="16" x:Shared="False">
        <Path Fill="Red" Data="M8 12a4 4 0 1 1 0-8 4 4 0 0 1 0 8m0 1A5 5 0 1 0 8 3a5 5 0 0 0 0 10"/>
        <Path Fill="Blue" Data="M10 8a2 2 0 1 1-4 0 2 2 0 0 1 4 0"/>
    </Canvas>
</Window.Resources>

После чего можно уже использовать ресурс, например в кнопке:

<Button>
    <Viewbox Width="32" Height="32" Child="{StaticResource IconVer1}"/>
</Button>

Чуть позже я подумал, что т.к. эти иконки предназначены для использования, в основном, в кнопках, то было бы полезно добавить реакцию на изменение свойства «IsEnabled». Тогда я добавил возможность указывать для каждого элемента «path» два цвета: для доступного и недоступного состояния. Копипаста получилась такая:

<Canvas x:Key="IconVer2" Width="16" Height="16" x:Shared="False">
    <Path Data="M8 12a4 4 0 1 1 0-8 4 4 0 0 1 0 8m0 1A5 5 0 1 0 8 3a5 5 0 0 0 0 10">
        <Path.Style>
            <Style>
                <Setter Property="Path.Fill" Value="Red"/>
                <Style.Triggers>
                    <Trigger Property="UIElement.IsEnabled" Value="False">
                        <Setter Property="Path.Fill" Value="Pink"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Path.Style>
    </Path>
    <Path Data="M10 8a2 2 0 1 1-4 0 2 2 0 0 1 4 0">
        <Path.Style>
            <Style>
                <Setter Property="Path.Fill" Value="Blue"/>
                <Style.Triggers>
                    <Trigger Property="UIElement.IsEnabled" Value="False">
                        <Setter Property="Path.Fill" Value="LightBlue"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Path.Style>
    </Path>
</Canvas>

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

<Canvas x:Key="IconVer3" Width="16" Height="16" x:Shared="False">
    <Canvas.Style>
        <Style>
            <Style.Triggers>
                <Trigger Property="UIElement.IsEnabled" Value="False">
                    <Setter Property="Canvas.Opacity" Value="0.25"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Canvas.Style>
    <Path Fill="Red" Data="M8 12a4 4 0 1 1 0-8 4 4 0 0 1 0 8m0 1A5 5 0 1 0 8 3a5 5 0 0 0 0 10"/>
    <Path Fill="Blue" Data="M10 8a2 2 0 1 1-4 0 2 2 0 0 1 4 0"/>
</Canvas>

Итоговый результат для всех трех вариантов отрисовки (и xaml-разметка кнопок) на рисунке ниже.

<StackPanel>
    <Button>
        <Viewbox Width="50" Height="50" Child="{StaticResource IconVer1}"/>
    </Button>
    <Button IsEnabled="False">
        <Viewbox Width="50" Height="50" Child="{StaticResource IconVer1}"/>
    </Button>
    <Button>
        <Viewbox Width="50" Height="50" Child="{StaticResource IconVer2}"/>
    </Button>
    <Button IsEnabled="False">
        <Viewbox Width="50" Height="50" Child="{StaticResource IconVer2}"/>
    </Button>
    <Button>
        <Viewbox Width="50" Height="50" Child="{StaticResource IconVer3}"/>
    </Button>
    <Button IsEnabled="False">
        <Viewbox Width="50" Height="50" Child="{StaticResource IconVer3}"/>
    </Button>
</StackPanel>
Итоговый результат с разными вариантами отрисовки
Итоговый результат с разными вариантами отрисовки

Итого. Хоть я и пошел другим путем, спасибо вам за интересую идею и полезный ресурс.

А почему вы ограничились только двумя цветами, хотя часть иконок в этом наборе (более сотни) содержит больше двух частей (три и более элемента path)?

На всякий случай: я не докапываюсь, просто меня зантересовал сам набор иконок, который вы предложили и методика их использования для нужд народного хозяйства.

Минутка занудства.

Насчет замены rect на path в align-top и align-bottom: у вас прямоугольник получается ширше (ширее?), чем в исходной картинке.

На момент написания статьи большинство (2070 из 2074) Bootstrap Icons используют для отрисовки исключительно элементы <path> (не задействуют <circle><rect>)

Если кому интересно, на сейчас из 2078 иконок, богопротивные элементы circle и rect есть в следующих файлах:

align-bottom
align-top
circle-fill
dice-1

ПыСы Извините, немного вопрос не по окладу: а почему "айконка", а не "иконка"?

Что-то мне тоже захотелось написать подобную статью. 

Что такое exe-файл, его структура и важность

Exe-файл – это центральный элемент каждого десктоп приложения в Windows. Давайте начнем с анализа его структуры. Вначале стоят символы «MZ», за которыми следует остальная последовательность байт. По мнению нашего учителя информатики, последовательность «MZ» является неотъемлемой частью exe-файла и очень важна для правильного выполнения программы. 

На этом доклад закончил.

Были сигналы: не чай он там пьет.

(с) Аpкадий и Боpис Стругацкие "Понедельник начинается в субботу"

А что имеется ввиду под "булевскими операциями"?

Простые, чисто булевские, выражения типа "x and y", или микс с математическими, типа "(x>0) and (sin(y)=1)"?

Хотите иметь классическую булеву логику (true/false) или тренарную (true/false/unknown)?

Просто интересно.

Когда-то давно делал подобную задачу. Еще для Трубо-Паскаля.

И таки полностью с вами согласен, что парсинг должен быть отдельно от котлет. В первую очередь, конечно, как раз для массовых вычислений по одной формуле (см. построение графиков).

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

Линейка не растет, потому что у на нее есть ГОСТ, который жестко фиксирует ее параметры. А вот на вселенную ГОСТа нет, отсюда и все безобразия! ))

Сергей Лукьяненко

РАЗМЫШЛЕНИЯ ОБ ИСТИННОЙ СУЩНОСТИ ТАК НАЗЫВАЕМЫХ "ДЖЕДАЕВ"...

Читать по ссылке: http://www.rusf.ru/lukian/books/jedi.htm

Предлагаю творчески углубить эту замечательную идею.

Вместо объявления переменных как

int a1;

int a2;

int a3;

… и т.д.

использовать конструкции вида:

int[] a;

 

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

1.        Все переменные располагаются в памяти одним блоком, что повышает аккуратность использования памяти.

2.        Легко запомнить, какой тип имеет переменная, исходя из имени массива.

3.        При необходимости можно легко изменить тип всех используемых переменных (например, если вдруг выясниться, что размерности int не хватает, то можно быстро переправить на long).

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

5.        Появляется возможность легко создавать (и восстанавливать) дамп состояния программы (сохранить во внешний файл один массив проще и надежнее, чем писать кучу переменных и ничего при этом не забыть).

Information

Rating
Does not participate
Location
Россия
Registered
Activity