Язык программирования C#9 и платформа .NET5
Часть 518 из 642 Информация о книге
На заметку! Более подробные сведения о классе
в WPF ищите в главе 27, а пока просто следуйте указаниям по мере проработки примера.UserControlПодобно окну типы
в WPF имеют файл XAML и связанный файл кода. Модифицируйте разметку XAML пользовательского элемента управления, чтобы определить простой элементUserControlвнутриLabel:Grid<UserControl x:Class="CustomDepProp.ShowNumberControl"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:Labelpublic partial class ShowNumberControl : UserControl{public ShowNumberControl(){InitializeComponent();}<b> // Обычное свойство .NET Core.</b>private int _currNumber = 0;public int CurrentNumber{get => _currNumber;set{_currNumber = value;numberDisplay.Content = CurrentNumber.ToString();}}}Обновите определение XAML в
, объявив экземпляр специального элемента управления внутри диспетчера компоновкиMainWindow.xml. Поскольку специальный элемент управления не входит в состав основных сборок WPF, понадобится определить специальное пространство имен XML, которое отображается на него. Вот требуемая разметка:StackPanel<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"<b> xmlns:myCtrls="clr-namespace: CustomDependencyProperty"</b>xmlns:local="clr-namespace: CustomDependencyProperty"mc:Ignorable="d"<b> Title="Simple Dependency Property App" Height="450" Width="450"</b>WindowStartupLocation="CenterScreen"><b> <StackPanel></b><b> <myCtrls:ShowNumberControl</b><b> HorizontalAlignment="Left" x:Name="myShowNumberCtrl" </b><b> CurrentNumber="100"/></b><b> </StackPanel></b></Window>Похоже, что визуальный конструктор Visual Studio корректно отображает значение, установленное в свойстве
(рис. 25.23).CurrentNumberОднако что, если к свойству
необходимо применить объект анимации, который обеспечит изменение значения свойства от 100 до 200 в течение 10 секунд? Если это желательно сделать в разметке, тогда областьCurrentNumberможно изменить следующим образом: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>
