1

比較的単純なはずの質問がありますが、答えがどこにも見つかりません。xaml の UserControl のリソース セクションでコンバーターを宣言しています。そのコンバーターには、「これ」で渡したい場所に設定したプロパティがあります。つまり、EventTagger と呼ばれる UserControl です。バインディングでは、通常、 ElementName="EventTagger" を使用して、少なくともメインの UserControl のプロパティにアクセスできますが、ここではバインディングを使用できないため、これをコンバーターのプロパティとして行う方法がわかりません。ここで DataContext を渡すことにも満足していますが、それを渡す方法もわかりません。考え?

<UserControl Name="EventTagger" ...>
    <UserControl.Resources>
        <TagFrameVerificationConverter x:Key="tagFrameVerificationConverter Tagger="?"/>
    </UserControl.Resources>
     ...
</UserControl>
4

2 に答える 2

2

コンバーターには何もありません。DataContextたとえあなたIValueConverterがから派生しDependencyObject、Taggerがあなたであるとしても、、またはDependencyPropertyを使用してそれをバインドすることはできません。のみ機能します(これはあなたの場合はあまり良くありません)。DataContextRelativeSourceElementNameSource

x:Reference代わりに使用できます

<UserControl Name="EventTagger" ...>
    <UserControl.Resources>
        <TagFrameVerificationConverter x:Key="tagFrameVerificationConverter"
                                       Tagger="{x:Reference EventTagger}"/>
    </UserControl.Resources>
</UserControl>

VS2010デザイナーを使用している場合は、次のようなエラーが表示されます。

サービスプロバイダーにINameResolverサービスがありません

これは単なる設計上のバグであり、connect:
Visual Studio 2010 InvalidOperationExceptionで説明されているように回避できます。WPFでx:Referenceを使用します。デザインモードの場合は
戻りProvideValueます。null

[ContentProperty("Name")]
public class Reference : System.Windows.Markup.Reference
{
    private static DependencyObject _dependencyObject = new DependencyObject();
    public Reference()
        : base()
    { }

    public Reference(string name)
        : base(name)
    { }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        if (DesignerProperties.GetIsInDesignMode(_dependencyObject) == true)
        {
            return null;
        }
        return base.ProvideValue(serviceProvider);
    }
}
于 2012-05-30T19:21:08.193 に答える
0

したがって、コメントに基づいて、次のようなものが機能します。

<UserControl Name="EventTagger" ...>
    <UserControl.Resources>
        <TagFrameVerificationConverter x:Key="tagFrameVerificationConverter" Tagger="{Binding}"/>
    </UserControl.Resources>
     ...
</UserControl>

プロパティは、バインディングを適切に処理できるようにするTagger必要があり、「現在のデータ コンテキストにバインドする」ことを意味します。 DependencyProperty"{Binding}"

あなたの質問に対するより一般的な答えは、コンバーターにパブリック プロパティを設定でき、上記のサンプルのように XAML でそれらのプロパティを設定できるということです。

于 2012-05-30T19:05:39.440 に答える