簡體   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