Чтение онлайн

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

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:local="clr-namespace: CustomDependencyProperty"

mc:Ignorable="d"

d:DesignHeight="300" d:DesignWidth="300">

<Grid>

<Label x:Name="numberDisplay" Height="50" Width="200"

Background="LightBlue"/>

</Grid>

</UserControl>

В

файле кода для данного элемента создайте обычное свойство .NET Core, которое упаковывает поле типа
int
и устанавливает новое значение для свойства
Content
элемента
Label
:

public partial class ShowNumberControl : UserControl

{

public ShowNumberControl

{

InitializeComponent;

}

// Обычное свойство .NET Core.

private int _currNumber = 0;

public int CurrentNumber

{

get => _currNumber;

set

{

_currNumber = value;

numberDisplay.Content = CurrentNumber.ToString;

}

}

}

Обновите определение XAML в

MainWindow.xml
, объявив экземпляр специального элемента управления внутри диспетчера компоновки
StackPanel
. Поскольку специальный элемент управления не входит в состав основных сборок WPF, понадобится определить специальное пространство имен XML, которое отображается на него. Вот требуемая разметка:

<Window x:Class="CustomDepPropApp.MainWindow"

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:myCtrls="clr-namespace: CustomDependencyProperty"

xmlns:local="clr-namespace: CustomDependencyProperty"

mc:Ignorable="d"

Title="Simple Dependency Property App" Height="450" Width="450"

WindowStartupLocation="CenterScreen">

<StackPanel>

<myCtrls:ShowNumberControl

HorizontalAlignment="Left" x:Name="myShowNumberCtrl"

CurrentNumber="100"/>

</StackPanel>

</Window>

Похоже,

что визуальный конструктор Visual Studio корректно отображает значение, установленное в свойстве
CurrentNumber
(рис. 25.23).

Однако что, если к свойству

CurrentNumber
необходимо применить объект анимации, который обеспечит изменение значения свойства от 100 до 200 в течение 10 секунд? Если это желательно сделать в разметке, тогда область
myCtrls:ShowNumberControl
можно изменить следующим образом:

<myCtrls:ShowNumberControl x:Name="myShowNumberCtrl" CurrentNumber="100">

<myCtrls:ShowNumberControl.Triggers>

<EventTrigger RoutedEvent = "myCtrls:ShowNumberControl.Loaded">

<EventTrigger.Actions>

<BeginStoryboard>

<Storyboard TargetProperty = "CurrentNumber">

<Int32Animation From = "100" To = "200" Duration = "0:0:10"/>

</Storyboard>

</BeginStoryboard>

</EventTrigger.Actions>

</EventTrigger>

</myCtrls:ShowNumberControl.Triggers>

</myCtrls:ShowNumberControl>

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

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

Теперь добавьте показанный ниже код, чтобы свойство

CurrentNumber
создавалось как свойство зависимости:

public int CurrentNumber

{

get => (int)GetValue(CurrentNumberProperty);

set => SetValue(CurrentNumberProperty, value);

}

public static readonly DependencyProperty CurrentNumberProperty =

DependencyProperty.Register("CurrentNumber",

Поделиться:
Популярные книги

Солнечный корт

Сакавич Нора
4. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Солнечный корт

О, мой бомж

Джема
1. Несвятая троица
Любовные романы:
современные любовные романы
5.00
рейтинг книги
О, мой бомж

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2

Вы не прошли собеседование

Олешкевич Надежда
1. Укротить миллионера
Любовные романы:
короткие любовные романы
5.00
рейтинг книги
Вы не прошли собеседование

Метаморфозы Катрин

Ром Полина
Фантастика:
фэнтези
8.26
рейтинг книги
Метаморфозы Катрин

Эволюция мага

Лисина Александра
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эволюция мага

Попаданка для Дракона, или Жена любой ценой

Герр Ольга
Любовные романы:
любовно-фантастические романы
7.17
рейтинг книги
Попаданка для Дракона, или Жена любой ценой

Истинная поневоле, или Сирота в Академии Драконов

Найт Алекс
3. Академия Драконов, или Девушки с секретом
Любовные романы:
любовно-фантастические романы
6.37
рейтинг книги
Истинная поневоле, или Сирота в Академии Драконов

Сумеречный Стрелок 5

Карелин Сергей Витальевич
5. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 5

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Возвышение Меркурия. Книга 17

Кронос Александр
17. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 17

Переиграть войну! Пенталогия

Рыбаков Артем Олегович
Переиграть войну!
Фантастика:
героическая фантастика
альтернативная история
8.25
рейтинг книги
Переиграть войну! Пенталогия

Волков. Гимназия №6

Пылаев Валерий
1. Волков
Фантастика:
попаданцы
альтернативная история
аниме
7.00
рейтинг книги
Волков. Гимназия №6

Картофельное счастье попаданки

Иконникова Ольга
Фантастика:
фэнтези
5.00
рейтинг книги
Картофельное счастье попаданки