单击行为后的wpf按钮

时间:2015-09-06 15:10:41

标签: c# css wpf xaml button

我正在做一个wpf程序,我做了一个自定义样式按钮:

<Style x:Key="ButtonMio" TargetType="{x:Type Button}">
        <Setter Property="Padding" Value="1"/>
        <Setter Property="Background" Value="Transparent" />
        <Setter Property="Foreground" Value="Transparent"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border Name="border" Background="{TemplateBinding Background}">
                        <ContentPresenter Name="content" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                  Margin="{TemplateBinding Padding}"
                                  RecognizesAccessKey="True"
                                  SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">

                            <Setter Property="Background" Value="#FF3EC8C6" />
                            <Setter Property="Foreground" Value="Transparent"/>
                        </Trigger>
                        <Trigger Property="IsPressed" Value="True">

                            <Setter Property="Background" Value="Transparent" />
                            <Setter Property="Foreground" Value="Transparent"/>
                            <Setter Property="BorderBrush" Value="Transparent"/>
                        </Trigger>
                        <Trigger Property="IsFocused" Value="True">

                            <Setter Property="Background" Value="Transparent" />
                            <Setter Property="Foreground" Value="Transparent"/>
                            <Setter Property="BorderBrush" Value="Transparent"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

嗯,按钮将图像作为内容(因此它比实际按钮小)。由于背景是透明的,我用鼠标触发器写了这个:

<Setter Property="Background" Value="#FF3EC8C6" />

它有效。但只有在点击之前。点击后没有更多背景。即使点击其他按钮并使第一个按钮失去焦点(我认为)背景仍然没有出现。 我改变了“IsPressed”和“IsFocused”,但是在第一种情况下,背景不会在点击之后消失,而在第二种情况下,没有任何东西可以使用tab来聚焦元素。

真的很抱歉我的英语。希望一切都清楚。谢谢!

1 个答案:

答案 0 :(得分:1)

声明触发器的顺序是问题。

 <ControlTemplate.Triggers>
      <Trigger Property="IsMouseOver" Value="True">
         <Setter Property="Background" Value="#FF3EC8C6" />    
      </Trigger>
      <Trigger Property="IsPressed" Value="True">
         <Setter Property="Background" Value="Transparent" />        
      </Trigger>
      <Trigger Property="IsFocused" Value="True">
         <Setter Property="Background" Value="Transparent" />
      </Trigger>
 </ControlTemplate.Triggers>

IsMouseOver在IsFocused启动后立即发生并使背景透明。

试试这样:

      <ControlTemplate.Triggers>
     <Trigger Property="IsFocused" Value="True">
         <Setter Property="Background" Value="#FF3EC8C6" />                    </Trigger>
      <Trigger Property="IsPressed" Value="True">
         <Setter Property="Background" Value="Transparent" />        
      </Trigger>
      <Trigger Property="IsMouseOver" Value="True">
         <Setter Property="Background" Value="Transparent" />
      </Trigger>
 </ControlTemplate.Triggers>