选中时,WPF ToggleButton不会改变颜色

时间:2016-02-19 17:53:25

标签: c# wpf xaml togglebutton

我正在尝试为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中找到了如何做到这一点所以我会在我提出这个问题之前再试一次。

谢谢。

2 个答案:

答案 0 :(得分:0)

因此,当鼠标未结束时(<Trigger Property="IsMouseOver" Value="false"><!--reset things--></Trigger>)没有触发器,因此按钮处于鼠标悬停状态。您必须拥有多个触发器以及打开和关闭,您可能需要查看MultiDataTrigger。目前对你来说这不是必需的,但我发现它可能很快就会出现。

How can I provide multiple conditions for data trigger in WPF?

答案 1 :(得分:0)

IsMouseOver 的值为false时,您应该触发。

另外,我建议您覆盖模板并执行您需要的操作:

    <Setter Property="Template">
    ...
    </ControlTemplate>

为您的触发器标记ControlTemplate.Triggers