Разбираюсь со свойствами зависимости. Как я понял, что бы создать свойство зависимости необходимо проделать следующие шаги (сейчас буду их сравнивать с тем что делаю я) 1)создать статическое поле типа DependencyProperty - создал:
public static readonly DependencyProperty BrushPropert
2) в статическом конструкторе класса - зарегистрировать свойство
зарегистрировал:
static MainWindow()
{
//регесртруем свойства зависимости
BrushProperty = DependencyProperty.Register("Brush", typeof(Brush),
typeof(InkCanvas), new PropertyMetadata(1, new
PropertyChangedCallback(OnCurrentBrushProperty)));
}`
2.1) new PropertyChangedCallback - принимает как делегат метод который будет реагировать на изменения свойства
3)создаем обычные свойства CLR
//свойсва CLR(обертка)
public Brush Brush
{
get { return (Brush)GetValue(BrushSizeProperty); }
set { SetValue(BrushSizeProperty, value); }
}
Хочу отметить, что вот здесь, при регистрации свойства: Register("Brush", typeof(Brush), typeof(InkCanvas)
- я указал typeof(InkCanvas)
- т.к мне необходимо, что бы данное свойство появилось у InkCanvas, но оно не определяется -почему? Вроде же все по "инструкции" делал?
Точнее как мне обращаться к эти свойствам - напрямую, прямо на экземпляре - как к обычным свойствам а не через SetValue и GetValue?
Вы не можете добавить свойство в существующий класс. Так DependencyProperty не работает. Вы можете, однако, добавить attached property, возможно, вам нужно именно это.
Например, так:
public static class InkCanvasExtensions
{
public static Brush GetBrush(DependencyObject obj)
{
return (Brush)obj.GetValue(BrushProperty);
}
public static void SetBrush(DependencyObject obj, Brush value)
{
obj.SetValue(BrushProperty, value);
}
public static readonly DependencyProperty BrushProperty =
DependencyProperty.RegisterAttached(
"Brush", typeof(Brush), typeof(InkCanvas),
new PropertyMetadata(null, (o, args) =>
OnCurrentBrushChange((InkCanvas)o, (Brush)args.NewValue)));
static void OnCurrentBrushChange(InkCanvas canvas, Brush newBrush)
{
// работайте с ним
}
}
При этом ваш XAML будет выглядеть как-то так:
<InkCanvas local:InkCanvasExtensions.Brush="Black"/>
Виртуальный выделенный сервер (VDS) становится отличным выбором
Доброго времени суток! При написании подсистемы тестирования пользовательских решений задач по программированию столкнулся с такой проблемой:
Добрый вечерЕсть вопрос, использую Angular Material для первого Angular'a