在我的 CustomControl 中,我有以下依赖属性:
public bool Favorite
{
get { return (bool)GetValue(FavoriteProperty); }
set { SetValue(FavoriteProperty, value); }
}
// Using a DependencyProperty as the backing store for Enabled. This enables animation, styling, binding, etc...
public static readonly DependencyProperty FavoriteProperty =
DependencyProperty.Register("Favorite", typeof(bool), typeof(FavoriteCustomControl), new PropertyMetadata(false, new PropertyChangedCallback(OnFavoriteChanged)));
private static void OnFavoriteChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
{
FavoriteCustomControl control = (FavoriteCustomControl) dependencyObject;
TextBlock textBlock = (TextBlock) control.GetTemplateChild(HeartPartName);
if (textBlock != null)
{
double opacity = ((bool)e.NewValue) ? 1 : 0.2;
textBlock.Opacity = opacity;
}
}
当我在我的窗口中声明时:
<custom:FavoriteCustomControl Grid.Row="1" Grid.Column="2" Margin="2" Favorite="true"/>
它在设计器视图中有效,但在我运行应用程序时无效。我调试了我能做到的最大值,但我只发现了一件我认为可能是问题的事情:
OnFavoriteChanged
回调运行它应该运行的确切次数,但var textBlock
始终为null。好吧,并非总是如此,因为在设计器模式下,我看到不透明度发生了变化,因此var textBlock
不为空。
我真的被困住了,我不知道在哪里寻找导致这种情况的错误/错误。
编辑:
现在我发现OnFavoriteChanged
之前调用了回调OnApplyTemplate()
,我认为这textBlock
就是 null 的原因。