c# - 拉伸(stretch)不适用于 WPF 模板化按钮

标签 c# wpf xaml templates button

我在 WPF 中创建了一个模板化按钮:

<ControlTemplate TargetType="{x:Type Button}"
                 x:Key="BoutonGris">
  <Button  Foreground="White"
           BorderBrush="Transparent"
           HorizontalAlignment="Center"
           VerticalAlignment="Center"
           HorizontalContentAlignment="Stretch"
           VerticalContentAlignment="Stretch">
    <Button.Content>
      <Border CornerRadius="3"
              HorizontalAlignment="Stretch"
              VerticalAlignment="Stretch">
        <ContentPresenter />
        <Border.Style>
          <Style TargetType="{x:Type Border}">
            <Setter Property="Background"
                    Value="#58585a" />
            <Style.Triggers>
              <Trigger Property="IsMouseOver"
                       Value="True">
                <Setter Property="Background"
                        Value="{DynamicResource DegradeCouleurTheme}" />
              </Trigger>
            </Style.Triggers>
          </Style>
        </Border.Style>
      </Border>
    </Button.Content>
    <Button.Style>
      <Style TargetType="{x:Type Button}">
        <Setter Property="Template">
          <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
              <ContentPresenter />
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Style>
    </Button.Style>
  </Button>
</ControlTemplate>

我在我的窗口中使用这个按钮:

<Button x:Name="BtnRestoreDefault" Template="{DynamicResource BoutonGris}" Content="Rest. défaut" Height="27"  Width="88" Click="Button_Click_RestoreDefault"/>

我的问题是按钮似乎没有 Height="27"和 Width="88"。

这是我在 VS2012 中的结果:

按钮的尺寸合适,但灰色区域不合适。我在模板上使用了 Stretch 关键字,但我没有发现错误。

如果我将 Stretch 用于 Horizo​​ntalAlignment、Horizo​​ntalContentAlignment、VerticalAlignment 和 VerticalContentAlignment,则灰色具有良好的尺寸,但是,文本内容在左/上!我想要一个中心文本。

有人有想法吗?

非常感谢,

最好的问候,

尼克修斯

最佳答案

这应该可以解决问题。

<ControlTemplate TargetType="{x:Type Button}" x:Key="BoutonGris">
    <Button  Foreground="White" BorderBrush="Transparent" 
             HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
             HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" >
        <Button.Content>
            <!-- A lot of your code -->
        </Button.Content>
        <!-- A lot of your code -->
    </Button>
</ControlTemplate>

一个问题,为什么你的 ControlTemplate 中有一个 Button 用于 Button?通常,我希望这里有简单的控件,例如 Border 等,因为您想要重新实现视觉外观。

编辑

ContentPresenter 之一应该这样声明。

<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>

我不确定是哪一个。但你可以尝试两者。 ;o)

关于c# - 拉伸(stretch)不适用于 WPF 模板化按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15951180/

相关文章:

c# - 转换 Model3DGroup 两次

wpf - 从 WPF 到 WinForms 的气泡鼠标事件

wpf - 仅在非常特殊的情况下,Visual Studio Intellisense不能在XAML上运行

c# - 如何在 WPF DataGrid 列中制作互斥复选框

c# - 使用 CEFSharp Web 浏览器的 WPF 应用程序在 clickonce 版本中崩溃

c# - 使用 try/catch 作为测试的错误形式?

c# - 如何判断 BottomSheetDialogFragment 何时展开以填充屏幕?

c# - 从 SQL Server 检索到的日期格式错误

c# - 将画笔的 ResourceDictionary 获取到 ItemsList 中

c# - 字符串加密/解密密码 c# Metro Style