Рейтинг@Mail.ru

Сортировка SortedDictionary в порядке убывания

Published in Полезные советы

Чтобы создать отсортированный словарь в .NET имеется тип SortedDictionary. А что если нужно отсортировать словарь в порядке убывания? Для этой цели есть перегруженный вариант конструктора, который в качестве одного из параметров принимает объект типа Comparer:

Private MyDict As New SortedDictionary(Of Integer, Object)(Comparer(Of Integer).Create(Function(x, y) y.CompareTo(x)))

Comparer в конструкторе обращает порядок элементов, сортируя в порядке убывания ключей.

Читать далее...

Как задать атрибут Icon для окна из кода

Published in Полезные советы

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

Dim w As New Window() With {
    .Icon = BitmapFrame.Create(Application.GetResourceStream(New Uri("Images/myIcon.ico", UriKind.RelativeOrAbsolute)).Stream)
}

Здесь Images/myIcon.ico – это путь к ресурсу иконки в структуре директорий проекта.

Читать далее...

Ошибка DeferrableContent в XAML

Published in Полезные советы

При возникновении ошибки DeferrableContent, например:

Exception: Задание свойства "System.Windows.ResourceDictionary.DeferrableContent" вызвало исключение.: номер строки XX и позиция в строке YY.
InnerException: ArgumentException: Элемент уже добавлен. Ключ в словаре: "System.Windows.Controls.ComboBox"  Добавляемый ключ: 'System.Windows.Controls.ComboBox'

нужно ставить атрибут x:Key перед типом. Например:

Вместо:

<Style TargetType="ComboBox" x:Key="cmb1Style">
    <Setter Property="VerticalContentAlignment" Value="Center" />
</Style>

<Style TargetType="ComboBox" x:Key="cmb2Style">
    <Setter Property="VerticalContentAlignment" Value="Top" />
</Style>

Описывать так:

<Style x:Key="cmb1Style" TargetType="ComboBox">
    <Setter Property="VerticalContentAlignment" Value="Center" />
</Style>

<Style x:Key="cmb2Style" TargetType="ComboBox">
    <Setter Property="VerticalContentAlignment" Value="Top" />
</Style>
Читать далее...

Как в XAML создать checkable-элементы меню, которые поддерживают только один нажатый элемент (как RadioButton)

Published in Программирование

Допустим, мы хотим в XAML создать меню, содержащее список элементов, в котором одновременно может быть выбран только один (поведение наподобие RadioButton).

Читать далее...

Как сохранить пробелы в XAML

Published in Полезные советы

Чтобы сохранить пробелы в разметке XAML, необходимо в нужном узле задать атрибут:

xml:space="preserve"

Далее использовать пробелы и/или символы переноса строки:

&#x0A;

x0A – это символ переноса строки в шестнадцатеричном фрмате в таблице символов ASCII с префиксом &#, который подсказывает это процессору XAML. Аналогичным образом можно использовать и другие непечатные символы из таблицы ASCII.

Например:

<TextBlock Text="Строка 1 &#x0A; Строка 2" xml:space="preserve" />
Читать далее...

WPF: элементы ListBox в виде CheckBox

Published in Полезные советы

Как в WPF привязать коллекцию типа Boolean к графическому элементу ListBox или ListView с дочерними элементами типа CheckBox?

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