如何使按钮在WPF中处于停止状态而不是处于停止状态?

问题描述:

我刚刚在WPF窗口中放置了一个完全正常的默认按钮,期望它具有一些正常的按钮状态。但它只是对鼠标作出反应,而不是鼠标向下。我只需要它有两个状态,所以我可以做到没有超过状态。我如何让它对被按下的鼠标按钮做出反应?如何使按钮在WPF中处于停止状态而不是处于停止状态?

这里是我的按钮:

<Button Width="380" 
     Height="80" 
     FontSize="30" 
     FontFamily="VAG Rounded" 
     Background="#337A05" 
     Foreground="White" 
     Margin="0,15" 
     Content="BACK TO GAMES" /> 
+0

为什么downvote? –

您可以在Button在设计模式在Visual Studio中右键单击并选择编辑模板 - >编辑复制,然后修改默认控件模板,按您的要求,例如通过去除IsMouseOver触发和改变的值在Background属性setter在IsPressed触发:

<Window...> 
<Window.Resources> 
<Style x:Key="FocusVisual"> 
    <Setter Property="Control.Template"> 
     <Setter.Value> 
      <ControlTemplate> 
       <Rectangle Margin="2" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
<SolidColorBrush x:Key="Button.Static.Background" Color="#FFDDDDDD"/> 
<SolidColorBrush x:Key="Button.Static.Border" Color="#FF707070"/> 
<SolidColorBrush x:Key="Button.MouseOver.Background" Color="#FFBEE6FD"/> 
<SolidColorBrush x:Key="Button.MouseOver.Border" Color="#FF3C7FB1"/> 
<SolidColorBrush x:Key="Button.Pressed.Background" Color="Red"/> 
<SolidColorBrush x:Key="Button.Pressed.Border" Color="#FF2C628B"/> 
<SolidColorBrush x:Key="Button.Disabled.Background" Color="#FFF4F4F4"/> 
<SolidColorBrush x:Key="Button.Disabled.Border" Color="#FFADB2B5"/> 
<SolidColorBrush x:Key="Button.Disabled.Foreground" Color="#FF838383"/> 
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}"> 
    <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/> 
    <Setter Property="Background" Value="{StaticResource Button.Static.Background}"/> 
    <Setter Property="BorderBrush" Value="{StaticResource Button.Static.Border}"/> 
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
    <Setter Property="BorderThickness" Value="1"/> 
    <Setter Property="HorizontalContentAlignment" Value="Center"/> 
    <Setter Property="VerticalContentAlignment" Value="Center"/> 
    <Setter Property="Padding" Value="1"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true"> 
        <ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsDefaulted" Value="true"> 
         <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
        </Trigger> 
        <!--<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>--> 
        <Trigger Property="IsPressed" Value="true"> 
         <Setter Property="Background" TargetName="border" Value="{StaticResource Button.Pressed.Background}"/> 
         <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Pressed.Border}"/> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Background" TargetName="border" Value="{StaticResource Button.Disabled.Background}"/> 
         <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Disabled.Border}"/> 
         <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="{StaticResource Button.Disabled.Foreground}"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
</Window.Resources> 
<Grid> 
    <Button Width="380" 
    Height="80" 
    FontSize="30" 
    FontFamily="VAG Rounded" 
    Background="#337A05" 
    Foreground="White" 
    Margin="0,15" 
    Content="BACK TO GAMES" 
    Style="{StaticResource ButtonStyle1}"/> 
</Grid> 
</Window> 

没有,没有,你可以简单的设置要做到这一点:)你必须替换模板属性。

+0

好主。这很不方便。我认为功能按钮不会是一个用户友好的IDE,它会让用户的工作如此艰难。我希望像这样的功能不会占用更多的XAML,而不是我的窗口其余部分的总和。 –

+0

您可以将样式放入您从App.xaml合并的ResourceDictionary中。然后,您将能够从应用程序中的所有视图中引用它。 – mm8

+0

如果您的问题已解决,请记住接受答案:https://meta.stackexchange.com/questions/23138/how-to-accept-the-answer-on-stack-overflow – mm8

你必须改变它的style/template。你需要熟悉ControlTemplatesVisualStates。这是一个tutorial