2017-09-21 12 views
0

WPF에서 단추에 대한 ControlTemplate을 만들고 트리거를 통해 Background Brush를 변경하려고했습니다. 브러시 값을 저장하기 위해 첨부 된 속성을 사용합니다.WPF : 컨트롤 템플릿 트리거 내부에서 연결된 속성을 읽을 수없는 이유는 무엇입니까?

첨부 된 속성 자체를 테스트 한 결과 잘 작동합니다. 설정하고 바인딩 할 수 있습니다 (예 : 단순히 해당 속성에 배경을 바인딩 할 때).

그러나 트리거 내에서 해당 속성을 가져 오려고하면 (해당 속성 값으로 Background 변경) 값이 읽히지 않습니다 (연결된 속성 가져 오기 도구 내에서 중단 점을 볼 때). 배경이 투명하게 바뀝니다.

어떻게 해결할 수 있습니까?

<ControlTemplate x:Key="DefaultButtonTemplate" TargetType="{x:Type Button}"> 
    <Border 
     x:Name="border" 
     BorderBrush="{TemplateBinding BorderBrush}" 
     BorderThickness="{TemplateBinding BorderThickness}" 
     Background="{TemplateBinding Background}" 
     SnapsToDevicePixels="True" 
     > 
     <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
    </Border> 
    <ControlTemplate.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Background" TargetName="border" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ButtonAttachedProperties.BackgroundOnMouseOver}"/> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

답변

3

오해. 그것은 당신이 한 속성의 두 부분으로 된 이름이 아니라 속성의 속성을 참조한다고 생각합니다. 다음과 같이 괄호로 구별 해보십시오.

Path=(myns:ButtonAttachedProperties.BackgroundOnMouseOver) 

네임 스페이스를 잊지 마십시오.

+0

굉장합니다. 고맙습니다! – user884248