0

我有一个Button我需要检测它是否进入 ToolBarOverflowPanel。

当前代码:

(逻辑:监控Children.CountAncestorType ToolBarPanel,发送到转换器,如果 value( ToolBarPanel.Children.Count) = FallbackValuethenToolBarPanel可能没有注册为 Ancestor,因为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没有提供更新通知。有没有办法解决它?

如何强制转换器更新?我需要什么样的绑定才能实现?

4

1 回答 1

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();
    }
}

我还没有测试过,所以如果有任何问题,请告诉我。

于 2017-07-29T13:08:17.163 回答