2013-02-11 73 views
1

我有以下标记:WPF的RelativeSource问题与嵌套控件

<Button Name="m_SaveButton" Command="{Binding SaveCommand}"> 
    <StackPanel> 
     <Image Source="{StaticResource IconSave16}"> 
      <Image.Style> 
       <Style TargetType="Image"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}}" Value="False"> 
          <Setter Property="Source" Value="{StaticResource IconSaveInactive16}" /> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Image.Style> 
     </Image> 
     <Label Content="Save" /> 
    </StackPanel> 
</Button> 

我想改变嵌套在按钮内部图像时Button.IsEnabled是假的。上面的标记不起作用。

我试图用Meleak的代码在这里找到:WPF Mouseover Trigger Effect for Child Controls

有谁可以建议我一个解决方案?

预先感谢您!

+0

您是否尝试过使用ElementName而不是RelativeSource进行绑定? – 2013-02-11 12:23:25

+0

嗯..还没有。我现在就试一试。 – papaiatis 2013-02-11 12:26:27

+0

它也不起作用: ' ...' – papaiatis 2013-02-11 12:29:32

回答

0

由于Value Precedence,您无法更改样式中的本地值。这应该工作。

<Image> 
    <Image.Style> 
     <Style TargetType="Image"> 
      <Setter Property="Source" Value="{StaticResource IconSave16}" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}}" Value="False"> 
        <Setter Property="Source" Value="{StaticResource IconSaveInactive16}" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Image.Style> 
</Image> 
+0

Oh jeez。我在一周前遇到过这个问题!我怎么能忘记这个......谢谢LPL! – papaiatis 2013-02-11 12:35:51