WPF 切换按钮在选中时不会改变颜色
本文关键字:改变 变颜色 按钮 WPF | 更新日期: 2023-09-27 18:35:33
我正在尝试为 ToggleBox 制作一种样式,以便在单击时它会改变颜色,我已经成功地在鼠标悬停时给了它一个下拉阴影,但由于某种原因,当我单击它而不是进入选中状态时,它停留在鼠标悬停状态。
它的 XAML 是:
<!--Primary toggle button style-->
<Style x:Key="PrimaryRoundedToggleButton" TargetType="ToggleButton">
<Setter Property="Margin" Value="5"/>
<Setter Property="Width" Value="180"/>
<Setter Property="Height" Value="30"/>
<Setter Property="Background" Value="#E08827"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontSize" Value="15"/>
<Setter Property="FontWeight" Value="DemiBold"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Border CornerRadius="4" Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Border CornerRadius="4" Background="{TemplateBinding Background}">
<Border.Effect>
<DropShadowEffect BlurRadius="4" ShadowDepth="3" Direction="300" Opacity="0.5"/>
</Border.Effect>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Border CornerRadius="4" Background="#58585a">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
事件处理程序是:
private void primaryToggleButton_Checked(object sender, RoutedEventArgs e)
{
primaryToggleButton.Content = "Restarting...";
serviceStatusChangeTimeout = Int32.Parse(ConfigurationManager.AppSettings.Get("serviceStatusChangeTimeout"));
websiteStatusChangeTimeout = Int32.Parse(ConfigurationManager.AppSettings.Get("websiteStatusChangeTimeout"));
MidTier.ServiceRestart(serviceStatusChangeTimeout);
Thread.Sleep(1000);
cacheBuilderStatus.Source = new BitmapImage(new Uri("pack://application:,,,/WpfCustomControlLibrary1;component/Resources/checkbox-complete.png"));
MidTier.CheckLastModified();
MidTier.webSiteRestart();
MidTier.applicationPoolRecycle();
primaryToggleButton.IsChecked = false;
}
我也在尝试让它更改按钮中的文本,但我记得在 XAML 中找到了如何做到这一点,所以我会在问这个问题之前尝试再次挖掘它。
谢谢。
因此,您的按钮将保持鼠标悬停状态,因为当鼠标未悬停时没有触发器(<Trigger Property="IsMouseOver" Value="false"><!--reset things--></Trigger>
)。 由于您必须有多个触发器,并且打开和关闭,您可能需要查看MultiDataTrigger。 目前你不需要,但我看到它可能很快就会。
如何在 WPF 中为数据触发提供多个条件?
当 IsMouseOver 的值为 false 时,您应该执行触发器。
此外,我建议您覆盖模板并执行所需的操作:
<Setter Property="Template">
...
</ControlTemplate>
并为您的触发器标记ControlTemplate.Triggers
。