none
wpf 样式中的触发器怎么写完全的效果才能被显示?以及额外的问题 RRS feed

  • 问题

  • 我写了个button的样式如下

    <Style x:Key="samllVirtualKeyBoad"  TargetType="{x:Type Button}">
            <Setter  Property="Width" Value="40"></Setter>
            <Setter Property="Height" Value="40" />
            <Setter Property="Background" Value="White"/>
            <Setter Property="BorderBrush" Value="Black" />
            <Setter Property="BorderThickness" Value="2"/>
            <Setter Property="Margin" Value="2"></Setter>
                    <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="Red"></Setter>
                       <Setter Property="Foreground" Value="Red"/>
                    <Setter Property="BorderBrush" Value="Black"></Setter>
                </Trigger>
                </Style.Triggers>

            </Style>

    运行时,触发器中的鼠标经过事件发生时只有字体颜色变红,其他的如button的背景颜色,边框等都没任何变化。

    额外的问题: 如何通过触发器使ComboboxItem的鼠标经过滑过事件触发时的背景颜色所改变的颜色怎么更改成其他颜色(写出样式即可)?以及如何通过触发器使button的click事件发生时,背景颜色如何变色?


    2016年9月14日 4:57

答案

  • 您好 轮回的锯齿,

    >>"运行时,触发器中的鼠标经过事件发生时只有字体颜色变红,其他的如button的背景颜色,边框等都没任何变化。"

    这是由于在控件模板中已经设置了一次MouseOver时的样式。如果要改变它们,必须重写控件的模板。

    <Trigger Property="IsMouseOver" Value="true">
        <Setter Property="Background" TargetName="border" Value="{StaticResource Button.MouseOver.Background}"/>
        <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.MouseOver.Border}"/>
    </Trigger>

    以上这些代码是我通过下面的步骤得到的。

    >>"额外的问题: 如何通过触发器使ComboboxItem的鼠标经过滑过事件触发时的背景颜色所改变的颜色怎么更改成其他颜色(写出样式即可)?以及如何通过触发器使button的click事件发生时,背景颜色如何变色?"

    这些问题和上面那个问题同一个道理,都需要通过修改控件的ControlTemplate来实现。

    Best Regards,
    Li Wang


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2016年9月15日 2:18

全部回复

  • 您好 轮回的锯齿,

    >>"运行时,触发器中的鼠标经过事件发生时只有字体颜色变红,其他的如button的背景颜色,边框等都没任何变化。"

    这是由于在控件模板中已经设置了一次MouseOver时的样式。如果要改变它们,必须重写控件的模板。

    <Trigger Property="IsMouseOver" Value="true">
        <Setter Property="Background" TargetName="border" Value="{StaticResource Button.MouseOver.Background}"/>
        <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.MouseOver.Border}"/>
    </Trigger>

    以上这些代码是我通过下面的步骤得到的。

    >>"额外的问题: 如何通过触发器使ComboboxItem的鼠标经过滑过事件触发时的背景颜色所改变的颜色怎么更改成其他颜色(写出样式即可)?以及如何通过触发器使button的click事件发生时,背景颜色如何变色?"

    这些问题和上面那个问题同一个道理,都需要通过修改控件的ControlTemplate来实现。

    Best Regards,
    Li Wang


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2016年9月15日 2:18
  • 想让触发器控制控件中的颜色,首先必须拆分出控件的构造,将控件的各个部分在Template中重组,

    然后才能在触发器中,控制各个部分的颜色,ComboBoxItem同理。

    以下是Button的Style

    <Style x:Key="samllVirtualKeyBoad"  TargetType="{x:Type Button}">
             <Setter  Property="Width" Value="40"></Setter>
             <Setter Property="Height" Value="40" />
             <Setter Property="Background" Value="White"/>
             <Setter Property="BorderBrush" Value="Black" />
             <Setter Property="BorderThickness" Value="2"/>
             <Setter Property="Margin" Value="2"></Setter>
             <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border x:Name="border" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
                            <ContentPresenter x:Name="contentPresenter" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
       Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                        </Border>
          <ControlTemplate.Triggers>
       <Trigger Property="IsMouseOver" Value="True">
        <Setter Property="Background" TargetName="border" Value="Red"></Setter>
        <Setter Property="Foreground" TargetName="border" Value="Red"/>
        <Setter Property="BorderBrush" TargetName="border" Value="Black"></Setter>
        </Trigger>
        <Trigger Property="IsPressed" Value="True">
        <Setter Property="Background" TargetName="border" Value="Yellow"></Setter>
        <Setter Property="Foreground" TargetName="border" Value="Blue"/>
        <Setter Property="BorderBrush" TargetName="border" Value="White"></Setter>
        </Trigger>
        <Trigger Property="IsEnabled" Value="True">
        <Setter Property="Background" TargetName="border" Value="Green"></Setter>
        <Setter Property="Foreground" TargetName="border" Value="Orange"/>
        <Setter Property="BorderBrush" TargetName="border" Value="Black"></Setter>
        </Trigger>
       </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

    2016年10月18日 11:27