0
我必須承認ControlTemplates的複雜運作並不是我準備好編寫有關書籍的東西。 :O)無法在ControlTemplate中使用效果
無論如何,我已經寫了一個自定義按鈕(必須有thosuands在那裏),以適應客戶的HMI(人機界面)的需求,當然,我已經提供了一個ControlTemplate它。
該按鈕總是顯示一個黑色陰影,但現在我想要它的陰影改變顏色,當按鈕變爲「熱」時,如鼠標懸停在它上面(按鈕類 - HmiToolbarButton
- 支持d-屬性稱爲「IsHot
」)。
這裏的(非工作)模板:
<Style TargetType="{x:Type local:HmiToolbarButton}">
<Setter Property="AutoSize" Value="False" />
<Setter Property="HotBehaviorNormal" Value="True" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:HmiToolbarButton}">
<Grid x:Name="_grd">
<Border
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
>
<ContentPresenter x:Name="PART_CONTENT" />
</Border>
<local:ButtonHotDecorator IsHitTestVisible="False" IsChecked="{TemplateBinding IsChecked}" IsMouseOver="{TemplateBinding IsHot}" IsEnabled="{TemplateBinding HotBehaviorNormal}" />
<Grid.Effect>
<DropShadowEffect ShadowDepth="0" Opacity="0.9" BlurRadius="10" Color="{TemplateBinding DropShadowColor}" />
</Grid.Effect>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsHot" Value="True">
<Setter TargetName="_grd" Property="Effect">
<Setter.Value>
<!-- *** PROBLEM HERE *** -->
<DropShadowEffect
ShadowDepth="0" Opacity="0.9" BlurRadius="10"
Color="{TemplateBinding HotDropShadowColor}"
/>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
黑色陰影工作正常,但我沒有得到任何效果都沒有,當我把鼠標移動到按鈕上。我懷疑這是TemplateBinding
這是行不通的,因爲如果我將其更改爲一個常量的顏色,效果將按預期顯示。
任何提示將不勝感激。
謝謝
謝謝John,就是這樣。我意識到我需要閱讀模板,但我發現很難在任何地方找到好的和詳盡的文檔。你能推薦一個或兩個資源嗎?這將不勝感激。乾杯! – 2012-03-29 07:36:57
WPF控件開發Unleashed具有與控件相關的所有內容,但我認爲缺少一些像VisualStateManager和行爲這樣的新東西。 – 2012-03-29 13:43:06