2013-04-16 204 views
1

我一直兜兜转转该数据触发因此它是不工作...如何从父属性设置触发设置子属性

我有了一个默认的阴影效果边框的按钮。不过,我想创建一个dep属性来切换这个。然而,我从来没有达到设定效果的地步。

<Style x:Key="RoundedButton" TargetType="{x:Type Button}"> 
<Setter Property="Template"> 
<Setter.Value> 
    <ControlTemplate TargetType="ctrls:RoundedButton"> 
    <Grid> 
    <Border> 
    <Border.Style> 
     <Style TargetType="ctrls:RoundedButton"> 
     <Style.Triggers> 
     <Trigger Property="IsDropShadowVisible" Value="True"> 
     <Setter Property="Effect"> 
      <Setter.Value> 
      <DropShadowEffect ShadowDepth="1"/> 
      </Setter.Value> 
     </Setter> 
     </Trigger> 
     </Style.Triggers> 
     </Style> 
    </Border.Style> 

这是基于关闭按钮,但实现自定义用户控制......这是遗留代码...

+0

后全XAML。另外,那个'DataTrigger'没有意义。使用常规的'Trigger Property = IsDropShadowVisible .. etc ..'。 –

+0

@HighCore更新了我的回答 –

+0

您的XAML没有意义。你有一个'Style TargetType =“Button”',然后是'ControlTemplate TargetType =“ctrls:RoundedButton”'。我建议你看看[本教程](http://www.wpftutorial.net)介绍性的XAML内容。 –

回答

1

我这里 这篇在一个新的WPF窗口的作品是什么。没有比你在这里看到的其他代码隐藏。

<Window.Resources> 
    <Style TargetType="{x:Type local:ShadowButton}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type local:ShadowButton}"> 
        <Button Name="Button"></Button> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsDropShadowVisible" Value="True"> 
          <Setter TargetName="Button" Property="Effect"> 
           <Setter.Value> 
            <DropShadowEffect ShadowDepth="1"/> 
           </Setter.Value> 
          </Setter> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 

<!-- snip code --> 

<local:ShadowButton Height="10" Width="10" IsDropShadowVisible="true"/> 

代码隐藏:

public class ShadowButton : Button 
{ 
    public DependencyProperty IsDropShadowVisibleProperty = 
     DependencyProperty.Register("IsDropShadowVisible", typeof(Boolean), typeof(ShadowButton), new PropertyMetadata(false)); 
    public Boolean IsDropShadowVisible 
    { 
     get { return (Boolean)GetValue(IsDropShadowVisibleProperty); } 
     set { SetValue(IsDropShadowVisibleProperty, value); } 
    } 
} 
+0

如果考虑到这个评论,那么这个修正了我的问题:边框样式,命名边框,然后给setter这个targetname。完成。 –