我有一个WPF应用程序,有一个灯和一个开关。当我按下开关时,开关和灯应该变成“开”的图像,当我再按一次时,它们应该变成“关”的图像。我有一个限制:我只能在XAML中严格执行此操作,因此没有代码隐藏文件。我这样做的方法是重新定义ToggleButton的控件模板。只有灯开关在这个控件模板中(灯本身不应该是可点击的),这显然是我的问题。我不能从控制模板触发器内部访问电灯开关。我收到以下错误:“无法找到触发器目标'lightImage‘。(该目标必须出现在任何Setter、触发器或使用它的条件之前。)”
下面是我的代码:
<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>有没有其他方法可以做到这一点?干杯
发布于 2010-11-22 23:48:15
您似乎有"onImage",但尝试引用"lightImage"?
编辑:由于这些触发器在你的控制模板中,我认为它只在该模板中查找"lightImage“。您应该在后台代码中为“source”创建一个属性,并在图像和按钮中绑定到该属性。
Edit2:如果后面没有代码,也许你可以尝试一些相对绑定,比如:
{Binding RelativeSource={RelativeSource
FindAncestor, AncestorType={x:Type Canvas}},
Path=lightImage.Source}抱歉,如果这是完全愚蠢的,我使用Silverlight,这只在WPF中可用,所以只是一个大胆的猜测!
无论如何,这个想法来自于这个小抄,似乎你可以在WPF中有相当复杂的绑定,所以值得尝试几个不同的:http://www.nbdtech.com/Free/WpfBinding.pdf
发布于 2010-11-23 03:06:48
最后,我修复了它。我没想到你可以在我不想被点击的图片上使用"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>https://stackoverflow.com/questions/4247211
复制相似问题