2012-08-04 113 views
1

我有上图像的按钮,如下所示:将鼠标悬停效果的按钮,图像在XAML

<Button Width="22" Height="22" Command="{Binding PreviousCommand}">        
    <Button.Template> 
    <ControlTemplate> 
     <Image Source="C:\Users\abcdef\Desktop\Slide-To-Left-Arrow-24.png"></Image>        
    </ControlTemplate> 
    </Button.Template> 
    <Button.InputBindings> 
    <KeyBinding Key="Up" Command="{Binding PreviousCommand}" Modifiers="Alt+Shift" /> 
    </Button.InputBindings> 
</Button> 

我想通过效果来识别按钮应用一些鼠标点击/可获得焦点。 我尝试添加触发如下,但它不工作:

<ControlTemplate.Triggers> 
    <Trigger Property="IsMouseOver" Value="True"> 
    <Setter Property="Background" Value="Black" /> 
    </Trigger> 
</ControlTemplate.Triggers> 

它不工作。我需要做什么?请帮助我。

回答

7

您的控件模板由只有在这一点上的图像,所以没有什么可以改变背景(通过你的触发器)。如果您想添加背景更改,则需要稍微扩展您的ControlTemplate。尝试是这样的:

<Button.Template> 
    <ControlTemplate> 
    <Grid x:Name="bg"> 
     <Image Margin="4" Source="C:\Users\dheeraj.dilip.awale\Desktop\Slide-To-Left-Arrow-24.png"></Image> 
    </Grid> 
    <ControlTemplate.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Target="bg" Property="Background" Value="Black" /> 
     </Trigger> 
    </ControlTemplate.Triggers>        
    </ControlTemplate> 
</Button.Template> 

这只是一个非常简单你如何利用您在上面所示的触发例子。所有这些都是在图像下添加一个Grid,并在图像上添加一个Margin,以便Grid的一部分可见。然后,它使用SetterTarget属性在用户将鼠标悬停在按钮上时分配GridBackground。你当然可以做更多与你的ControlTemplate提供其他类型的视觉线索,但希望这会让你开始。

+0

谢谢。但它在Target =“mygrid”上给出编译时错误。 – deathrace 2012-08-06 06:03:25

+0

你的模板中有一个名为“mygrid”的元素吗?我在你的文章或我的回答中看不到那个名字。您需要确保'Trigger'' Setter'中的'Target'与模板中'Grid'的'x:Name'匹配。 – 2012-08-06 13:50:20

+0

就像魅力一样,即使我不得不在设置者中设置TargetName而不是Target – MUG4N 2016-07-23 17:43:50