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

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

Жанры

Язык программирования 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. Другая сторона
Фантастика:
боевая фантастика
6.83
рейтинг книги
Путь Шедара

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

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

Охота на разведенку

Зайцева Мария
Любовные романы:
современные любовные романы
эро литература
6.76
рейтинг книги
Охота на разведенку

Я до сих пор не князь. Книга XVI

Дрейк Сириус
16. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я до сих пор не князь. Книга XVI

Последний Паладин

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

"Малыш"

Рам Янка
2. Девочка с придурью
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Малыш

Мастер Разума II

Кронос Александр
2. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.75
рейтинг книги
Мастер Разума II

Здравствуй, 1985-й

Иванов Дмитрий
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
Здравствуй, 1985-й

Счастливый торт Шарлотты

Гринерс Эва
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Счастливый торт Шарлотты

Назад в СССР: 1984

Гаусс Максим
1. Спасти ЧАЭС
Фантастика:
попаданцы
альтернативная история
4.80
рейтинг книги
Назад в СССР: 1984

Не грози Дубровскому! Том IX

Панарин Антон
9. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том IX

Секретарша генерального

Зайцева Мария
Любовные романы:
современные любовные романы
эро литература
короткие любовные романы
8.46
рейтинг книги
Секретарша генерального

Газлайтер. Том 2

Володин Григорий
2. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 2

Искушение генерала драконов

Лунёва Мария
2. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Искушение генерала драконов