我有按钮和自定义模板。在模板中,我在网格中有两个按钮。 每个按钮都有自己的自定义模板。此外,我还为此根网格设置了触发器 IsMouseOver。我的目标是在鼠标结束时更改两个按钮的样式。但Setter的TargetName属性无法访问嵌套的controltemplate控件。
<Button Style="{StaticResource DropDownStyle}" Content="Downloads"/>
<Style x:Key="DropDownStyle" TargetType="{x:Type Button}">
...
<ControlTemplate TargetType="{x:Type Button}">
<Grid x:Name="DropDownButtonPanel">
...
<Button Grid.Column="0" Content="{TemplateBinding Content}">
<Button.Template>
<ControlTemplate TargetType="Button">
<Grid x:Name="BlackSection"/>
...
<Button Grid.Column="1" Click="OnButtonClick">
<Button.Template>
<ControlTemplate TargetType="Button">
<Grid x:Name="GreenSection"/>
...
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True" SourceName="DropDownButtonPanel">
...
</Trigger>
...
如何在ControlTemplate.Triggers中访问BlackSection和GreenSection中的元素。只是setter TargetName =“Name”没用。
PS。我在其中一个使用两个按钮来处理不同的Click事件。另一个解决方案是Grid元素的Click事件,但我也不知道如何做到这一点。
提前感谢您的帮助!
答案 0 :(得分:1)
你做不到。您可以通过应用样式来更改子按钮的某些方面。
但是,整件事看起来很混乱。 “按钮”控件就是这样,具有两种状态(按下或未按下),以及按下时可调用的可选命令。听起来你正试图将更多的功能融入其中。您能否进一步解释为什么模板上需要两个按钮?