Попытка создать свой собственный AttachedProperty для WPF DependencyObject не смогла фактически выполнить то, что я от него хотел, и я немного обеспокоен тем, что (опять же) не полностью понял концепцию WPF.
Я сделал очень простой тестовый класс, чтобы показать, в чем заключается моя проблема. С Документация MSDN , я скопировал
public class TestBox : TextBox
{
public static readonly DependencyProperty IsBubbleSourceProperty = DependencyProperty.RegisterAttached(
"IsBubbleSource",
typeof(Boolean),
typeof(TestBox)
);
public static void SetIsBubbleSource(UIElement element, Boolean value)
{
element.SetValue(IsBubbleSourceProperty, value);
}
public static Boolean GetIsBubbleSource(UIElement element)
{
return (Boolean)element.GetValue(IsBubbleSourceProperty);
}
public Boolean IsBubbleSource
{
get
{
return (Boolean)GetValue(IsBubbleSourceProperty);
}
set
{
SetValue(IsBubbleSourceProperty, value);
}
}
}
Теперь, поместив мой новый и забавный TextBox в Grid, вот так
<Grid vbs:TestBox.IsBubbleSource="true">
<vbs:TestBox x:Name="Test" Text="Test" >
</vbs:TestBox>
</Grid>
Я ожидал, что каждый дочерний элемент, который не устанавливает само свойство IsBubbleSource
, «наследует» его от своей родительской сетки. Это не делает этого; MessageBox.Show(Test.IsBubbleSource.ToString())
показывает «ложь». Присоединенное свойство имеет значение true. Я проверил это с помощью обработчика события OnPropertyChanged. Я что-то пропустил?
Спасибо!