[英]How can I attach a property to a control or use a binding that updates whenever VisualTreeHelper.GetParent() changes?
我有一个Button
,需要检测它是否进入ToolBarOverflowPanel中。
当前代码:
(逻辑:监视Children.Count
以获取AncestorType ToolBarPanel
,发送到转换器,如果value( ToolBarPanel.Children.Count
)= FallbackValue
则ToolBarPanel
可能未注册为祖先,因为Button
现在位于ToolBarOverflowPanel
public class IsInOverflowPanel : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value?.ToString().Equals("-1");
}
/*ConvertBack(...) not included here*/
}
和XAML:
<ControlTemplate.Resources>
<local:IsInOverflowPanel x:Key="MyOverflowDetector"/>
</ControlTemplate.Resources>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding Children.Count, Converter={StaticResource MyOverflowDetector}, RelativeSource={RelativeSource AncestorType=ToolBarPanel}, FallbackValue=-1}" Value="True">
<!--Do Stuff Here-->
</DataTrigger>
</ControlTemplate.Triggers>
此代码的问题在于,当按钮进入ToolBarOverflowPanel
时,它不会更新。
但是起初它是有效的。 我的结论是Children.Count
没有给出更新通知。 有办法解决吗?
如何强制转换器更新? 我需要什么样的约束力才能实现?
尝试进行绑定:
<ControlTemplate.Resources>
<local:IsOverflowPanelConverter x:Key="IsOverflowPanel" />
</ControlTemplate.Resources>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ToolBarOverflowPanel}}, Converter={StaticResource IsOverflowPanel}}" Value="True">
</DataTrigger>
</ControlTemplate.Triggers>
这个转换器
public class IsOverflowPanelConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value?.GetType() == typeof(ToolBarOverflowPanel);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
我还没有测试过,所以请告诉我是否有任何问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.