两个控件模板的一个触发器

时间:2012-01-20 15:23:30

标签: wpf

我有按钮和自定义模板。在模板中,我在网格中有两个按钮每个按钮都有自己的自定义模板。此外,我还为此根网格设置了触发器 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事件,但我也不知道如何做到这一点。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

你做不到。您可以通过应用样式来更改子按钮的某些方面。

但是,整件事看起来很混乱。 “按钮”控件就是这样,具有两种状态(按下或未按下),以及按下时可调用的可选命令。听起来你正试图将更多的功能融入其中。您能否进一步解释为什么模板上需要两个按钮?