2017-09-21 6 views
0

WPFでは、ボタン用のControlTemplateを作成し、トリガーによって背景ブラシを変更しようとしました。ブラシの値を保存するために、私は添付プロパティを使用します。WPF:コントロールテンプレートトリガーの内部から添付プロパティを読み取ることができないのはなぜですか?

添付されたプロパティ自体をテストして、うまく動作します。設定できます(たとえば、単にそのプロパティにバックグラウンドをバインドした場合など)。

しかし、トリガーの中でそのプロパティを取得しようとすると(バックグラウンドをそのプロパティの値に変更します)、値は読み取られません(添付プロパティゲッター内のブレークポイントを参照)背景が透明に変わります。

どうすればこの問題を解決できますか?

<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

あなたには間違いがあります。 1つのプロパティの2つの部分からなる名前ではなく、プロパティのプロパティを参照していると考えます。

Path=(myns:ButtonAttachedProperties.BackgroundOnMouseOver) 

名前空間を忘れないようにしてください。

+0

驚くばかりです。ありがとうございました! – user884248

関連する問題