繁体   English   中英

如何在VisualTreeHelper.GetParent()更改时将属性附加到控件或使用会更新的绑定?

[英]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 )= FallbackValueToolBarPanel可能未注册为祖先,因为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM