|
Программирование >> Программирование с использованием ajax
Здесь методы GetValue () и SetValue (), соответственно, получают и устанавливают значение свойства зависимости MyStringProperty для текущего экземпляра. Эти два метода являются общедоступными, так что клиентский код может использовать их напрямую для манипулирования значениями свойств зависимостей. Именно поэтому добавление соответствующего .NET-свойства для обеспечения возможности получения прямого доступа к свойству зависимости не является обязательным. Если требуется указать для свойства метаданные, тогда нужно использовать объект, унаследованный от PropertyMetadata, например, FrameworkPropertyMetadata, и передавать его в виде четвертого параметра методу Register {). У конструктора FrameworkPropertyMetadata имеется И перегрузок и каждая из них принимает один или более из параметров, перечисленных в табл. 34.5. Таблица 34.5. Параметры, которые принимает конструктор FrameworkPropertyMetadata Тип параметра Описание object defaultValue FrameworkPropertyMetadataOptions flags PropertyChangedCallback propertyChangedCallback CoerceValueCallback coerceValueCallback bool isAnimationProhibited UpdateSourceTrigger defaultUpdateSourceTrigger Значение, которое должно использоваться для свойства по умолчанию Комбинация флагов (из перечисления Framework PropertyMetadataOptions), которые можно использовать для указания дополнительных метаданных для свойства. Например, флаг Af fectsArrange служит для объявления о том, что внесение изменений в свойство может отражаться на компоновке элемента управления. Это будет вынуждать отвечающий за компоновку механизм окна заново просчитывать компоновку элемента управления в случае изменения свойства. Полный перечень доступных для этого параметра опций можно найти в документации MSDN Метод обратного вызова, который должен использоваться при изменении значения свойства Метод обратного вызова, который должен использоваться при приведении значения свойства Указывает, может ли данное свойство изменяться в результате применения анимационного эффекта Когда значения свойств привязываются к данным, это свойство определяет то, когда должно происходить обновление источника данных, в соответствии со значениями из перечисления UpdateSourceTrigger. По умолчанию для него устанавливается значение PropertyChanged, указывающее, что обновление источника привязки должно происходить сразу же при изменении свойства. Такое поведение подходит не для всех случаев; например, свойство TextBox.Text требует, чтобы для этого свойства использовалось значение LostFocus. Оно в его случае гарантирует, что обновление источника привязки не будет происходить преждевременно. Еще для этого свойства можно использовать значение Eplicit, которое указывает, что обновление источника привязки должно осуществляться только по требованию (т.е. при вызове метода UpdateSource () класса, унаследованного от DependancyObj ect) В качестве простого примера FrameworkPropertyMetadata можно применить просто для указания значения, которое должно использоваться для свойства по умолчанию: public class MyClass : DependencyObject { public static DependencyProperty MyStringProperty = DependencyProperty. Register( MyString , typeof(string), typeof(MyClass), new FrameworkPropertyMetadata( Default value ) значение no умолчанию Ранее уже было рассказано о трех методах обратного вызова, которые можно применять для уведомления об изменении значения свойства, для приведения значения свойства и для верификации значения свойства. Эти методы, подобно самому свойству зависимости, должны обязательно реализоваться в виде общедоступных, статических методов. У каждого из них имеется конкретный возвращаемый тип и список параметров, которые нужно использовать. В следующем практическом занятии демонстрируется пример создания и применения пользовательского элемента управления с двумя свойствами зависимостей. В нем можно будет увидеть, как конкретно реализуются методы обратного вызова для этих свойств в коде пользовательского элемента управления. Пользовательские элементы управления 1. Создайте новое WPF-пpL7IOжeниe по имени Ch34Ex05 и сохраните его в каталоге C:\BegVCSharp\Chapter34. 2. Добавьте в это приложение новый пользовательский элемент управления Card и измените код в представляющем его файле Card.xaml следующим образом: <UserControl xmlns= http: schemas.microsoft.cbm/winfx/2006/xaml/presentation xmlns :x= http: / /schemas .microsof t. com/wmf x/2 00 6/xaml x:Class= Ch34Ex05.Card Height= 150 Width= 100 x:Name= UserControl FontSize= 16 FontWeight= Bold > <UserControl.Resources> <DataTemplate x:Key= SuitTemplate > <TextBlock Text= {Binding} /> </DataTemplate> </UserControl.Resources> <Grid> <Rectangle Stroke= {xiNull} RadiusX= 12.5 RadiusY= 12.5 > <Rectangle.Fill> <LinearGradientBrush EndPoint= 0.47,-0.167 StartPoint= 0.86, 0.92 > <GradientStop Color= #FFDlC78F Offset= 0 /> <GradientStop Color= #FFFFFFFF Offset= l /> </LinearGradientBrush> </Rectangle.Fill> <Rectangle.BitmapEffect> <DropShadowBitmapEffeet /> </Rectangle.BitmapEffect> </Rectangle> <Label x:Name= SuitLabel Content= {Binding Path=Suit, ElementName=UserControl, Mode=Default} ContentTemplate= {DynamicResource SuitTemplate} HonzontalAlignment= Center VerticalAlignment= Center Margin= 8,51,8,60 /> <Label x:Name= RankLabel Content= {Binding Path=Rank, ElementName=UserControl, Mode=Default} ContentTemplate= {DynamicResource SuitTemplate} HorizontalAlignment= Left VerticalAlignment= Top Margin= 8,8,0,0 /> <Label x:Name= RankLabelInverted Content= {Binding Path=Rank, ElementName=UserControl, Mode=Default} ContentTemplate= {DynamicResource SuitTemplate} HonzontalAlignment= Right VerticalAlignment= Bottom Margin= 0, 0, 8, 8 RenderTransformOrigin= 0.5, 0.5 > <Label.RenderTransform> <RotateTransform Angle= 180 /> </Label.RenderTransform> </Label> <Path Fill= #FFFFFFFF Stretch= Fill Stroke= {x:Null} Margin= 0,0,35.218,-0.077 Data= Fl MHO.5,51 L123.16457,51 C116.5986, 76.731148 115.63518,132.69684 121.63533,149.34013 133.45299, 182.12018 152.15821,195.69803 161.79765,200.07669 LllO.5,200 C103.59644, 200 98,194.40356 98,187.5 L98,63.5 098,56.596439 103.59644,51 110.5,51 z > <Path.OpacityMask> <LinearGradientBrush EndPoint= 0.957, 1.127 StartPoint= 0,-0.06 > <GradientStop Color= #FF000000 Offset= 0 /> <GradientStop Color= #OOFFFFFF Offset= l /> </LinearGradientBrush> </Path.OpacityMask> </Path> </Grid> </UserControl> 3. Измените код в Card. xaml. cs, как показано ниже: public partial class Card : UserControl public static string[] Suits = { Club , Diamond , Heart , Spade }; public static DependencyProperty SuitProperty = DependencyProperty.Register( Suit , typeof(string), typeof(Card), new PropertyMetadata ( Club , new PropertyChangedCallback(OnSuitChanged)), new ValidateValueCallback(ValidateSuit) public static DependencyProperty RankProperty = DependencyProperty.Register( Rank , typeof(int), typeof(Card) , new PropertyMetadata (1), new ValidateValueCallback(ValidateRank) public CardO { InitializeComponent ();
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |