-1

変なお願いがあります。動的リソースが FrameworkElement に関連して変更されたときに通知を受ける必要がありますが、その FrameworkElement にプロパティ設定していません。そのため{DynamicResource someKey}、XAML やsomeElement.SetResourceReference()コード ビハインドでは使用できません。

現在の値を取得するのは簡単です。呼び出すだけでsomeElement.FindResource("someKey")、現在の値が何であれ取得できますが、それにはポーリングが必要です。

バインドできる偽のバインディング ソース オブジェクトを作成することを検討しましたが、問題はビジュアル ツリーの一部ではないため、そのリソースがアプリ レベルで定義されていない限り、取得できません。ビジュアル ツリーに詰め込むこともできません。

DependencyProperty を定義できる Behaviors を使用する回答を見てきました。FrameworkElement にアタッチすると、疑うように更新されますが、FrameworkElement の setResourceReference に相当する Behaviors を呼び出す方法がわからないため、XAML が必要です。 .

それで...考え?

4

1 に答える 1

0

使用法なしで満足のいく答えを出すのは難しいです。Behavior AKA 添付プロパティ ソリューションは機能しますが、DependencyProperty.

public static class AttachedProperty
{
    public static readonly DependencyProperty DynamicResourceProperty = DependencyProperty.RegisterAttached("DynamicResource", typeof(object), typeof(AttachedProperty), new PropertyMetadata(null));

    public static object GetDynamicResource(DependencyObject obj)
    {
        return (object)obj.GetValue(DynamicResourceProperty);
    }

    public static void SetDynamicResource(DependencyObject obj, object value)
    {
        obj.SetValue(DynamicResourceProperty, value);
    }
}

リソースを追跡する Element に添付プロパティを設定します。

<Grid x:Name="grid" my:AttachedProperty.DynamicResource="{DynamicResource Brush}"/>

これは、DependecyPropertyバインドして通知を取得し、値をコンバーターに渡すことができる です。

于 2015-11-19T09:43:22.500 に答える