我有一个Button
我需要检测它是否进入ToolBarOverflowPanel。
当前代码:
(逻辑:监控Children.Count
为AncestorType ToolBarPanel
,发送到转换器,如果值(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
没有提供更新通知。有办法解决吗?
如何强制转换器更新?我需要什么样的约束来实现它?
答案 0 :(得分:0)
尝试使用此绑定:
<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();
}
}
我没有测试过,所以如果有任何问题请告诉我。