2013-06-23 47 views
0

我是新來的WPF的造型部分。我想要做的是得到一個附加屬性的值,在一個setter,例如:ControlTemplate之外是否有與TemplateBinding等價的東西?

<Trigger Property="SomeProperty" Value="SomeValue"> 
    <Setter Property="SomeProperty" 
      Value="(My attached property, let's say lcl:MyClass.MyString)"/> 
</Trigger> 

我知道,你可以在ControlTemplate使用{TemplateBinding lcl:MyClass.MyString}得到的東西到這種效果。我的問題是:你可以在不使用ControlTemplate的情況下做到這一點嗎?

回答

0

你可以嘗試使用:

<Setter Property="SomeProperty" Value="{Binding Path=(lcl:MyClass.MyString), RelativeSource={RelativeSource self}}"/> 

如果你的附加屬性應用於元素作爲自己的風格。如果沒有,您可以使用RelativeSource或ElementName來查找相應的元素。

我不知道你是如何做到的,因爲你的代碼缺乏細節。下面的代碼工作:

<UserControl.Resources> 
    <Style x:Key="LabelStyle" TargetType="{x:Type Label}"> 
     <Style.Triggers> 
      <Trigger Property="IsEnabled" Value="False"> 
       <Setter Property="Content" 
       Value="{Binding Path=(TestWebBrowser:AttachP.ValueEditorState), RelativeSource={RelativeSource self}}"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</UserControl.Resources> 

<StackPanel> 
    <Label x:Name="label" TestWebBrowser:AttachP.ValueEditorState="HelloWorld" Style="{StaticResource LabelStyle}"/> 
    <Button Content="Disable Label" Click="Button_Click"/> 
</StackPanel> 

按鈕的單擊事件處理程序將標籤的IsEnabled設置爲false以觸發觸發器。注意你必須在綁定中使用Path =和括號。

+0

首先,它是RelativeSource而不是RelatedSource。其次,這是行不通的。 –

+0

是的,它應該是RelativeSource,我的錯誤。您需要知道應用附加屬性的對象。無論是在樣式還是控件模板中,您需要做的是導航到該對象。 –

+0

我已經完成了... –

相關問題