2013-06-23 4 views
0

저는 WPF의 스타일 부분에 익숙하지 않습니다. 내가 뭘 원하는 당신이 ControlTemplate{TemplateBinding lcl:MyClass.MyString}을 사용하여이 효과에 뭔가를 얻을 수 있다는 사실을 알고ControlTemplate 외부에서 TemplateBinding과 동일한 기능이 있습니까?

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

:, 세터에서 예컨대을 연결된 속성의 값을 얻는 것입니다. 제 질문은 : 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> 

버튼의 클릭 이벤트 핸들러는 트리거를 트리거하기 위해 Label의 IsEnabled를 false로 설정합니다. 그리고 바인딩에서 괄호와 함께 Path =를 사용해야합니다.

+0

우선, 'RelatedSource'가 아닌'RelativeSource'입니다. 둘째로, 이것은 효과가 없습니다. –

+0

네, 그것은 RelativeSource 여야합니다, 저의 실수. 첨부 된 속성을 적용하는 객체를 알아야합니다. 스타일이나 컨트롤 템플릿에 상관없이, 당신이해야 할 일은 그 객체로 이동하는 것입니다. –

+0

나는 그것을했다. .. –