wpf触发器属性IsPressed无法正常工作

时间:2016-09-14 20:10:23

标签: wpf xaml wpf-style

当我点击Button时,其中的图片必须更改并保持更改状态。我尝试使用Triggers Button上的Style,将图像绑定到IsPressed属性,但是当Button被释放时,图像会返回前一个。请帮忙。

<Button Content="Easy Locate" Height="20" Width="85" Margin="0,2,0,0">
  <Button.Style>
    <Style TargetType="{x:Type Button}">
      <Style.Triggers>
        <Trigger Property="IsPressed" Value="True">
          <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate TargetType="{x:Type Button}">
                <Border BorderThickness="0">
                  <Image Source="/AltusClient;component/Images/waiting.png"
                         Height="20"
                         Width="25"/>
                </Border>
                <!--<ControlTemplate.Triggers>
                  <Trigger Property="IsPressed" Value="True">
                    <Setter Property="Background" Value="Transparent"/>
                    <Setter Property="BorderThickness" Value="0"/>
                  </Trigger>
                </ControlTemplate.Triggers>-->
              </ControlTemplate>
            </Setter.Value>
          </Setter>
        </Trigger>
      </Style.Triggers>
    </Style>
  </Button.Style>
</Button>

2 个答案:

答案 0 :(得分:1)

这是一个按照您想要的方式工作的按钮示例。您可以通过添加另一个TriggerTag属性设置为null,空字符串或除{{1}之外的世界上的任何内容,轻松地将按钮切换回其默认状态}}。

"ButtonHasBeenPressed"

答案 1 :(得分:0)

您也可以使用代码隐藏。

假设按钮是:

<Button Click="Button_Click">
  <Image Source="/Image1.png"/>
</Button>

然后,后面的代码可能是:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var b = sender as Button;

    if (b == null)
        return;

    var image = new Image { Source = GetImageSource(), };

    b.Content = image;
}

private BitmapImage GetImageSource()
{
    var imageSource = new BitmapImage();

    imageSource.BeginInit();
    imageSource.UriSource = new Uri("/Image2.png", UriKind.Relative);
    imageSource.EndInit();

    return imageSource;
}

这是一个简化版本,每次用户点击时都会加载新图像。如果您想避免不必要的二次加载,可以设置private bool _imageSet;之类的私有标记,并将其设置为Button_Click方法。

您也可以在Window(或UserControl)初始化的早期加载新图像。

最后,我建议您将所有图片放在ResourceDictionary中,并通过StaticResource Key在整个应用程序中调用它们,而不是全部使用URI。但这是另一个话题。