2010-11-22 106 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> 
相關問題