Рейтинг@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" />
Читать далее...

Как сделать перенос строки в XAML

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

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

    <sys:String x:Key="myString" xml:space="preserve">My String with &#13; carry return</sys:String>

Здесь:

&#13;
– символ переноса строки в таблице ASCII;
xml:space="preserve"
– директива, указывающя парсеру XAML, что пробельные символы нужно сохранить. Если её не указать, парсер удалит все «лишние» пробелы, в т.ч. переносы строк.
Читать далее...

Как сделать пункт меню с выравниванием по правому краю (WPF)

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

Чтобы сделать в WPF в панели меню какие-то пункты с выравниваеним по правому краю (например, меню «Справка» или «О программе»), можно описать в XAML произвольную панель элементов, как в примере ниже:

<Menu>

    <Menu.ItemsPanel>
        <ItemsPanelTemplate>
            <DockPanel />
        </ItemsPanelTemplate>
    </Menu.ItemsPanel>

    <MenuItem Header="Item1" />
    <MenuItem Header="Item2" />
    <MenuItem Header="Справка" HorizontalAlignment="Right" />
</Menu>
Читать далее...

Как создать безрамочное окно в WPF

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

Чтобы создать окно без рамок и без стандартных элементов управления, в файле разметки в свойствах окна достаточно добавить 3 атрибута: WindowStyle, AllowsTransparency и Background.

<Window x:Class="BorderlessWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        WindowStyle="None"
        AllowsTransparency="True"
        Background="Transparent"
        MouseLeftButtonDown="Window_MouseLeftButtonDown"
        Title="Hello, Soltau.ru"
        Width="200" Height="200">
    <Grid>
        <Rectangle Fill="Yellow" Opacity="0.7" RadiusX="40" RadiusY="40" />
        <Button Width="100" Height="30" Content="Закрыть" Click="Button_Click" />
    </Grid>
</Window>

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

Public Class BorderlessWindow

    Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
        Me.Close()
    End Sub

    Private Sub Window_MouseLeftButtonDown(sender As Object, e As MouseButtonEventArgs)
        Me.DragMove()
    End Sub

End Class

Выглядеть это будет примерно так:

Окно без рамок в WPF
Окно без рамок в WPF
Читать далее...
Subscribe to this RSS feed