WPF 边框厚度禁用子元素填充

本文关键字:元素 填充 边框 WPF | 更新日期: 2023-09-27 18:37:14

我想在鼠标悬停时将按钮的边框厚度属性动画化为 5,除了当边框厚度增加按钮内的内容时,一切都很好,这是我不想发生的事情。有没有办法绕过/禁用它?

这是我的代码

<ControlTemplate TargetType="{x:Type Button}">
    <ControlTemplate.Resources>
        <Storyboard x:Key="MouseOverAnimation">
            <ThicknessAnimation Storyboard.TargetName="ButtonBorder" Storyboard.TargetProperty="BorderThickness" To="3" Duration="0:0:0.2" />
        </Storyboard>
        <Storyboard x:Key="MouseOutAnimation">
            <ThicknessAnimation Storyboard.TargetName="ButtonBorder" Storyboard.TargetProperty="BorderThickness" To="1" Duration="0:0:0.2" />
        </Storyboard>
    </ControlTemplate.Resources>

  <Border x:Name="ButtonBorder" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}">
      <VirtualizingStackPanel   VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.VirtualizationMode="Recycling" Background="{TemplateBinding Background}">
          <ContentPresenter  Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"/>
      </VirtualizingStackPanel>
  </Border>
  <ControlTemplate.Triggers>
      <Trigger Property="IsMouseOver" Value="True">
          <Trigger.EnterActions>
              <BeginStoryboard Storyboard="{StaticResource MouseOverAnimation}"></BeginStoryboard>
          </Trigger.EnterActions>
      </Trigger>
  </ControlTemplate.Triggers>

这是 XAML 中的按钮

<Button Style="{StaticResource SoulsButton}" Width="150" >
    <TextBlock FontFamily="Resources/Fonts/#Univers UltraCondensed" FontSize="20"  Foreground="{StaticResource DarkSoulsYellow}" Width="50" Height="20">INSTALL</TextBlock>
</Button>

WPF 边框厚度禁用子元素填充

您可以摆脱在 XAML 之后的烦人。当边框宽度更改时,不会填充文本:

<Button Width="150" >
    <Button.Template>
        <ControlTemplate TargetType="{x:Type Button}">
            <ControlTemplate.Resources>
                <Storyboard x:Key="MouseOverAnimation">
                    <ThicknessAnimation Storyboard.TargetName="ButtonBorder" Storyboard.TargetProperty="BorderThickness" To="3" Duration="0:0:0.2" />
                </Storyboard>
                <Storyboard x:Key="MouseOutAnimation">
                    <ThicknessAnimation Storyboard.TargetName="ButtonBorder" Storyboard.TargetProperty="BorderThickness" To="1" Duration="0:0:0.2" />
                </Storyboard>
            </ControlTemplate.Resources>
            <Grid>
                <Border x:Name="ButtonBorder" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}">
                    <VirtualizingStackPanel   VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.VirtualizationMode="Recycling" Background="{TemplateBinding Background}">
                    </VirtualizingStackPanel>
                </Border>
                <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center"/>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Trigger.EnterActions>
                        <BeginStoryboard Storyboard="{StaticResource MouseOverAnimation}"></BeginStoryboard>
                    </Trigger.EnterActions>
                    <Trigger.ExitActions>
                        <BeginStoryboard Storyboard="{StaticResource MouseOutAnimation}"></BeginStoryboard>
                    </Trigger.ExitActions>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Button.Template>
    <TextBlock FontSize="20" Foreground="Green">INSTALL</TextBlock>
</Button>