Есть у меня файл MainWindow.XAML
- в котором я создаю собственный элемент управления с именем ControlBrush
<ControlBrush:MyBrushClass
x:Name="NewBackground"
CanvasBrushCLR="{Binding ElementName=canvas1, Path=Background }">
</ControlBrush:MyBrushClass>
используя класс MyBrushClass
вот я его подключаю:
xmlns:ControlBrush="clr-namespace:WpfApp1"
Задаю этому элементу управления имя x:Name="NewBackground"
Далее обращаюсь к CLR свойству CanvasBrushCLR
вот оно в классе MyBrushClass :
public double CanvasBrushCLR
{
get { return (double)GetValue(CanvasBrushProperty); }
set { SetValue(CanvasBrushProperty, value); }
}
и в качестве значения использую привязку (Binding) к элементу canvas1 на форме и его свойству Background
Что касается CLR свойства, которое я использую для привязки, оно у меня используется при регистрации свойства зависимости CanvasBrushProperty
public static DependencyProperty CanvasBrushProperty;//имя поля
static MyBrushClass()
{
CanvasBrushProperty = DependencyProperty.Register("CanvasBrushCLR", typeof(double ), typeof(MyBrushClass));
}
//CanvasBrushCLR -ИМЯ CLR обвертки
//typeof(Color) - тип свойства зависимости
//typeof(MyBrushClass) - класс в котором регистрируется свойство зависимости
Ну и на форме у меня есть две кнопки и соответственно обработчики событий для них:
MyBrushClass mb;
private void button2_Click(object sender, RoutedEventArgs e)
{
mb = new MyBrushClass();
canvas1.Background.Opacity = mb.CanvasBrushCLR; //обрабатываем binding
}
private void button1_Click(object sender, RoutedEventArgs e)
{
mb = new MyBrushClass();
mb.CanvasBrushCLR = (double)Convert.ToInt32( TB1.GetLineText(0));
}
Как видно в одном из обработчиков событий я в CLR свойство записываю значение из TB1 - TextBox на форме - т.е я ввожу строку в TextBox , и по нажатию на кнопку она преобразуется в double и присваивается свойству CanvasBrushCLR.
Но, когда в другой кнопке я хочу уже "проинициализированным" свойством CanvasBrushCLR присвоить canvas1.Background.Opacity у меня появляется ошибка:
Не удается задать свойство объекта "#FFFFFFFF", так как он находится в состоянии "только чтение
- хотя и Opacity и CanvasBrushCLR - имеют методы доступа get и set
Специально так подробно рассматриваю, что бы продемонстрировать, что вроде бы разобрался в свойствах зависимости - т.е примерно имею представление, но до конца не могу понять где ошибка.