[英]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.