Рейтинг@Mail.ru
Полезные советы

Полезные советы (70)

Короткие практические полезные советы из области ИТ.

Множественная привязка в WPF

Print Friendly, PDF & Email

Как сделать привязку (binding) визуального элемента в WPF к нескольким свойствам? Для этого существует так назваемая множественная привязка. Вот пример разметки, который использует свойства FirstName и LastName некоторого объекта для вывода их посредством одного элемента TextBlock:

<TextBlock>
  <TextBlock.Text>
    <MultiBinding StringFormat="{}{0} {1}">
      <Binding Path="FirstName" />
      <Binding Path="LastName" />
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>

Формат вывода текста определяется атрибутом StringFormat. Обратите внимание на пустые фигурные скобки в начале определения формата строки. Они подсказывают парсеру XAML, что здесь используется привязка.

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

Public Class PersonNameMultiConverter
    Implements IMultiValueConverter

        Public Function Convert(values() As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IMultiValueConverter.Convert
            If (values.Length > 0) Then
                Dim firstName As String = values(0).ToString()
                Dim lastName As String = values(1).ToString()
                Return firstName & " " & lastName
            End If
            Return String.Empty
        End Function

        Public Function ConvertBack(value As Object, targetTypes() As Type, parameter As Object, culture As CultureInfo) As Object() Implements IMultiValueConverter.ConvertBack
            Throw New NotImplementedException()
        End Function
End Class

Далее в начале XAML файла, в котором планируется использовать данный конвертер, в разделе ресурсов необходимо объявить соответствующий ресурс:

<conv:PersonNameMultiConverter x:Key="personNameMultiConverter" />

И далее создадим текстовое поле и добавим ему привязку:

<TextBlock>
  <TextBlock.Text>
    <MultiBinding Converter="{StaticResource personNameMultiConverter}">
      <Binding Path="FirstName" />
      <Binding Path="LastName" />
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>

Гораздо больше кода потребовалось, чем в первом варианте, верно? Однако преимуществом последнего метода является то, что конвертеру можно передавать сложные объекты и производить с ними какую-либо серьёзную обработку, что попросту невозможно при использовании первого варианта.

Print Friendly, PDF & Email

Как в XAML сделать привязку к значению системной переменной

Print Friendly, PDF & Email

Допустим, мы хотим прямо в XAML сделать привязку непосредственно к системной переменной. Скажем, вывести в элементе TextBlock максимальное значение для типа System.UInt64 (беззнаковое 64-разрядное целое). Для этого необходимо:

  1. В начале страницы/окна добавить ссылку на пространство имён System:
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
  2. В XAML коде страницы ссылка на тип будет иметь следующий вид:
    <TextBlock Text="{x:Static Member=sys:UInt64.MaxValue}" />
    или проще:
    <TextBlock Text="{x:Static sys:UInt64.MaxValue}" />
Print Friendly, PDF & Email

Если не работает мышь в МСВС, запущенной на виртуальной машине

Print Friendly, PDF & Email
Если у вас установлена операционная система МСВС на виртуальной машине (VMWare, VirtualBox и других) и не работает мышь, следует попробовать вот что.
  • Зайти в панель управления, в раздел «Оборудование».
  • Выбрать настройки параметров мыши.
  • Выставить следующие настройки: интерфейс PS/2 (мышь может быть и USB), модель MS IntelliMouse, устройство /dev/psaux, и поставить галку «Мышь с колёсиком».
  • Перезагрузить ОС МСВС на виртуальной машине.

После этого мышь должна заработать.

Настройки мыши в ОС МСВС
Настройки мыши в ОС МСВС
Print Friendly, PDF & Email

Что делать, если Quartus не видит USB Blaster

Print Friendly, PDF & Email

Если вы корректно установили драйверы для программатора USB Blaster, а он всё равно не видится из среды Quartus II и выдаёт что-то такое:

Сообщение об ошибке при загрузке Quartus ii 8.1

или ошибку с кодом 82:

Сообщение об ошибке при загрузке Quartus ii 13.1

Вероятнее всего, что проблема в сервере JTAG. Бывает, что его блокирует антивирус или фаервол. В таком случае, если файл jtagserver.exe не находится в директории quartus\bin и quartus\bin64, то следует его восстановить из вирусного хранилища и добавить в список исключений. Если же файл присутствует в указанных директориях, то следует отключить антивирус и фаерол, в затем запустить файл с параметром:
jtagserver.exe --install

После этого USB Blaster должен появиться в списке оборудования (Hardware).

Print Friendly, PDF & Email

Параметры проекта по умолчанию в Visual Studio

Print Friendly, PDF & Email

Рекомендую при написании кода в Visual Studio на VB.NET всегда использовать жёсткую проверку соответствия типов, которая задаётся директивой Option Strict. При создании нового проекта с настройками среды по умолчанию, используется нестрогая проверка. Чтобы каждый раз не менять данную директиву в свойствах проекта, её можно поменять в настройках Visual Studio: Options — Projects and Solutions — VB Defaults — Option Strict

Настройки по умолчанию для новых проектов, создаваемых в Visual Studio
Настройки по умолчанию для новых проектов, создаваемых в Visual Studio
Print Friendly, PDF & Email

Добавление собственных определений для списка задач (Task List Tokens) в Visual Studio

Print Friendly, PDF & Email

Если при наборе кода в редакторе кода Visual Studio написать закомментированное слово TODO, то эта строка появится в окне списка заданий (View — Other Windows — Task List). Если после TODO написать какое-то описание, то оно также появится в этом окне. Например, так:

//TODO Реализовать этот метод другим алгоритмом (на C#)
или так:
'TODO Реализовать этот метод другим алгоритмом (на VB.NET)
Print Friendly, PDF & Email

Установка масштаба 100% в редакторе XAML

Print Friendly, PDF & Email

В Visual Studio в визуальном редакторе XAML, вплоть до новейшей версии 2019 года, когда открываешь проект и загружаешь интерфейс окна, страницы или пользовательского элемента управления, среда выводит его порой в совершенно неудобном масштабе. Так, например, создаваемое окно в редакторе XAML может отобразиться в масштабе 600% или, наоборот, в масштабе 10% от оригинального. Приходится использовать маленькое выпадающее меню в углу, в котором можно задать масштаб. Да, при повторной загрузке этого окна, Visual Studio запомнит выбранный пользователем масштаб и будет использовать его. Но при выгрузке проекта и повторной загрузке данная информация не сохраняется Придётся снова вручную задавать масштаб. Это долго и неудобно.

Print Friendly, PDF & Email

Добавление заданного текста к содержимому RichTextBox (WPF)

Print Friendly, PDF & Email

Напишем метод, который добавляет к содержимому расширенного текстового поля RichTextBox текст заданного цвета:

Private Sub AppendText(text As String, color As Color)
    With RichTextBox1
            .SelectionStart = RichTextBox1.TextLength
            .SelectionLength = 0
            .SelectionColor = color
            .AppendText(text)
            .SelectionColor = .ForeColor
    End With
End Sub
Print Friendly, PDF & Email

Определение константы в XAML

Print Friendly, PDF & Email

Можно определить константу заданного типа прямо в XAML, а не в коде. Для этого следует в разделе импорта пространств имён сослаться, среди прочих, на пространство имён System:

xmlns:sys="clr-namespace:System;assembly=mscorlib"

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

<sys:String x:Key="myConst">Это константа, определённая в  XAML</sys:String>

Аналогичным образом можно объявить даже массив:

<x:Array Type="{x:Type sys:Int32}" x:Key="myIntegerArray">
    <sys:Int32>1</sys:Int32>
    <sys:Int32>2</sys:Int32>
    <sys:Int32>3</sys:Int32>
    <sys:Int32>4</sys:Int32>
</x:Array>

Теперь, в XAML коде страницы или окна, можно использовать определённую константу так:

<TextBlock Text="{StaticResource myConst}" />

Или так:

<ComboBox ItemsSource="{StaticResource myIntegerArray}" />
Print Friendly, PDF & Email

Стили обрезки тек текста в TextBlock (WPF)

Print Friendly, PDF & Email

У элемента управления TextBlock имеется интересное свойство TextTrimming, которое позволяет определить стиль, как будет отображаться текст, который полностью не помещается в родительском контейнере. Например, если указать так:

<TextBlock TextTrimming="WordEllipsis" />

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

<TextBlock TextTrimming="CharacterEllipsis" />

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

Print Friendly, PDF & Email

Использование нескольких конструкторов в одном блоке Using (VB.NET)

Print Friendly, PDF & Email

В Visual Basic .NET есть такая, довольно часто встречающаяся, конструкция:

Using fs As New FileStream(fi.FullName, FileMode.Open)
    Using sr As New StreamReader(fs, Text.Encoding.GetEncoding(1251))
	'...
    End Using
End Using

Для неё есть удобный сокращённый синтаксис:

Using fs As New FileStream(fi.FullName, FileMode.Open), sr As New StreamReader(fs, Text.Encoding.GetEncoding(1251))
    '...
End Using
Print Friendly, PDF & Email

Отмена привязки сочетания клавиш для команд в WPF

Print Friendly, PDF & Email

Иногда мы хотим отменить стандартное сочетание клавиш для какой-либо команды в XAML. Например, де-факто справка во всех WPF (и не только) приложениях вызывается по нажатию кнопки F1. Но мы хотим, чтобы окно справки открывалось по нажатию на F2, а на F1 – нет. Если мы напишем так:

<KeyBinding Key="F2" Command="Help" />

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

<KeyBinding Key="F2" Command="Help" />
<KeyBinding Key="F1" Command="NotACommand" />
Print Friendly, PDF & Email

Проверка значений, вводимых в поле TextBox, в XAML

Print Friendly, PDF & Email

В WPF имеется специальный стандартный механизм, позволяющий выполнять проверку (валидацию) данных, вводимых пользователем в текстовое поле TextBox. Этот механизм называется правилами проверки (validation rule). Для полей ввода, в которые введены недопустимые значения, в WPF даже определён свой стиль: красная рамка вокруг элемента TextBox. Конечно, его можно переопределить.

Чтобы воспользоваться стандартным валидатором, нужно выполнить три простых шага. Давайте рассмотрим их на таком примере: есть свойство MyProperty типа Integer, и его значение должно лежать в границах от 1 до 10.

1) Сначала создаём класс, который является наследником класса ValidationRule:

Print Friendly, PDF & Email
Подписаться на этот канал RSS