2012-05-30 97 views
1

我有什麼應該是一個比較簡單的問題,但我不能在任何地方找到答案。我在xaml的UserControl的資源部分聲明瞭一個轉換器。該轉換器有一個屬性,我已經設置了要傳入「this」的位置,也就是名爲EventTagger的UserControl。在結合可以正常用戶的ElementName =「EventTagger」至少主要用戶控件的訪問性能,但我無法弄清楚如何做到這一點作爲一個屬性的轉換器,因爲我不能在這裏使用的綁定。我也會在這裏傳遞DataContext的內容,但無法弄清楚如何傳遞。思考?傳遞的用戶控件作爲參數傳遞給資源在XAML

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

您可以使用轉換器參數? – CodingGorilla

+0

我不這麼認爲,因爲我不認爲你可以在轉換器參數中使用綁定。 – dbromberg

+0

不,你是對的,因爲轉換參數是綁定本身的一部分。那麼你只需要在你的轉換器上設置一個屬性?我想你上面的XAML對我來說不是很清楚你想要做什麼。 – CodingGorilla

回答

2

轉換器將不會有任何DataContext所以即使你IValueConverterDependencyObject派生並標註器是一個DependencyProperty,你將無法使用DataContextRelativeSourceElementName綁定它。只有Source會起作用(在你的情況下這不太好)。

您可以使用x:Reference代替

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

如果您使用Visual Studio 2010的設計,你會得到一個錯誤說

服務提供商缺少INameResolver服務

這只是一個設計師的錯誤,它可以按照連接描述的方式進行處理:
Visual Studio 2010 InvalidOperationException using x:Reference in WPF
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); 
    } 
} 
+0

太棒了!這像一個魅力。以前從未聽說過x:Reference標籤。謝謝! – dbromberg

0

因此,基於該意見,會是這樣的工作:

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

Tagger屬性應該是一個DependencyProperty因此它可以妥善處理綁定,然後"{Binding}"只是意味着「結合當前數據上下文「。

更普遍的回答你的問題是,你可以對你的轉換器的公共屬性,你可以在XAML中設置這些屬性,因爲我有我的樣本上面。

+0

我不相信這會起作用,因爲Converter不是一個DependencyObject,所以你不能擁有DependencyProperties。 – dbromberg

+0

如果需要,您可以將它設置爲「DependencyObject」,您只需從「DependencyObject」繼承。 – CodingGorilla

相關問題