2010-11-22 97 views
0

我有一个具有指示灯和开关的WPF应用程序。当我按下开关时,开关和指示灯应该变为“ON”图像,而当我再次按下时,它们应该变为它们的“OFF”图像。我有一个限制:我只能在XAML中严格执行此操作,因此没有代码隐藏文件。 我这样做的方式是重新定义ToggleButton的控件模板。只有灯开关在这个控制模板中(灯本身不应该是可点击的),这显然是我的问题。我无法从控制模板触发器中访问灯光开关。我得到以下错误“无法找到触发目标‘lightImage’(目标必须出现在任何二传手,触发器,或使用它的条件)。”WPF/XAML:从ControlTemplate访问ControlTemplate外部的元素。触发器

继承人我的代码:

<Image Name="lightImage" Source="Resources/LOFF.bmp" Stretch="None" Canvas.Left="82" Canvas.Top="12"/> 
    <ToggleButton Canvas.Left="169" Canvas.Top="123"> 
    <ToggleButton.Template> 
     <ControlTemplate TargetType="ToggleButton"> 
     <Image Name="switchImage" Source="Resources/SUp.bmp"/> 
     <ControlTemplate.Triggers> 
      <Trigger Property="IsChecked" Value="True"> 
      <Setter TargetName="switchImage" Property="Source" Value="Resources/SDown.bmp" /> 
      <Setter TargetName="lightImage" Property="Source" Value="Resources/LON.bmp"/> 
      </Trigger> 
      <Trigger Property="IsChecked" Value="False"> 
      <Setter TargetName="switchImage" Property="Source" Value="Resources/SUp.bmp"/> 
      <Setter TargetName="lightImage" Property="Source" Value="Resources/LOFF.bmp"/> 
      </Trigger> 
     </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </ToggleButton.Template> 
    </ToggleButton> 

是还有另一种方式来做到这一点? 干杯

回答

0

你似乎有“onImage”,但试图引用“lightImage”?

编辑:由于这些触发器在您的控制模板中,我认为它只在该模板内查找“lightImage”。你应该在后面的代码中为'source'创建一个属性,并在图像和按钮中绑定这个属性。

EDIT2:如果背后没有代码,也许你可以尝试一些相对的线沿线的结合:

{Binding RelativeSource={RelativeSource 
FindAncestor, AncestorType={x:Type Canvas}}, 
Path=lightImage.Source} 

很抱歉,如果这完全是愚蠢的,我使用Silverlight,这是只在WPF可用,所以只有一个胡乱猜测!

总之,想法来源于此的cheatsheet,似乎可以有相当复杂的绑定在WPF,所以值得尝试一些不同的:http://www.nbdtech.com/Free/WpfBinding.pdf

+0

对不起,它是从错误码的C/P。将其更改为正确的“问题”代码:) – johnrl 2010-11-22 15:51:54

0

最后,我固定它。我不认为你可以在我不希望点击的图像上使用“IsHitTestVisible”属性。有了这个属性,我可以将lightImage放在控制模板中,然后瞧。

赫雷什的代码:

<ToggleButton Canvas.Left="81" Canvas.Top="20"> 
      <ToggleButton.Template> 
       <ControlTemplate TargetType="ToggleButton"> 
        <Canvas> 
         <Image x:Name="lightImage" Source="Resources/LOFF.bmp" IsHitTestVisible="False" /> 
         <Image x:Name="switchImage" Source="Resources/SUp.bmp" Canvas.Left="88" Canvas.Top="100"/> 
        </Canvas> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsChecked" Value="True"> 
          <Setter TargetName="lightImage" Property="Source" Value="Resources/LON.bmp"/> 
          <Setter TargetName="switchImage" Property="Source" Value="Resources/SDown.bmp"/> 
         </Trigger> 
         <Trigger Property="IsChecked" Value="False"> 
          <Setter TargetName="lightImage" Property="Source" Value="Resources/LOFF.bmp"/> 
          <Setter TargetName="switchImage" Property="Source" Value="Resources/SUp.bmp"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </ToggleButton.Template> 
     </ToggleButton> 
相关问题