2017-09-21 35 views
0

在WPF中,我爲按鈕創建了一個ControlTemplate,並嘗試通過觸發器更改Background Brush。要存儲筆刷的值,我使用附加屬性。WPF:爲什麼我無法從控件模板觸發器中讀取附加屬性?

我測試了附加屬性本身,它工作得很好 - 它可以被設置,並且它可以被綁定(比如當我簡單地將背景綁定到該屬性時)。當我嘗試在觸發器內獲取該屬性(將Background更改爲該屬性的值)時,該值甚至不會被讀取(正如我在附加屬性getter中的斷點時看到的那樣),而且背景變爲透明。

我該如何解決這個問題?

<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

它誤解了你。它認爲你正在引用一個屬性的屬性,而不是一個屬性的兩部分名稱。嘗試使用parens消除歧義,如下所示:

Path=(myns:ButtonAttachedProperties.BackgroundOnMouseOver) 

不要忘記命名空間。

+0

太棒了。謝謝! – user884248

相關問題