将 ControlTemplate 中的边框大小设置为按钮的大小
Set size of border inside ControlTemplate to size of button
我想要一个用于几个按钮的 ControlTemplate,这样我就可以在鼠标悬停在按钮上时控制按钮的颜色。问题是我使用边框作为 ControlTemplate 内容,并且我希望该边框的大小 (BorderThickness) 等于按钮的大小。由于按钮是网格的一部分,因此它的大小是灵活的。到目前为止,这是我的代码:
<Window x:Class="WPFTesting.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPFTesting"
mc:Ignorable="d"
Title="MainWindow" Height="400" Width="350">
<Window.Resources>
<Style TargetType="Button" x:Key="ex">
<Setter Property="Background" Value="Black"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontSize" Value="50"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border BorderBrush="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Button Content="Btn0" Margin="0, 10, 0, 30" Style="{StaticResource ex}" Grid.Row="0"/>
<Button Content="Btn1" Margin="0, 10, 0, 30" Grid.Row="1"/>
<Button Content="Btn2" Margin="0, 10, 0, 30" Grid.Row="2"/>
</Grid>
如何使 BorderThickness 填充整个网格行。我是否应该首先使用边框作为 ControlTemplate 内容?
你应该写
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}">
<ContentPresenter
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>
我想要一个用于几个按钮的 ControlTemplate,这样我就可以在鼠标悬停在按钮上时控制按钮的颜色。问题是我使用边框作为 ControlTemplate 内容,并且我希望该边框的大小 (BorderThickness) 等于按钮的大小。由于按钮是网格的一部分,因此它的大小是灵活的。到目前为止,这是我的代码:
<Window x:Class="WPFTesting.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPFTesting"
mc:Ignorable="d"
Title="MainWindow" Height="400" Width="350">
<Window.Resources>
<Style TargetType="Button" x:Key="ex">
<Setter Property="Background" Value="Black"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontSize" Value="50"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border BorderBrush="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Button Content="Btn0" Margin="0, 10, 0, 30" Style="{StaticResource ex}" Grid.Row="0"/>
<Button Content="Btn1" Margin="0, 10, 0, 30" Grid.Row="1"/>
<Button Content="Btn2" Margin="0, 10, 0, 30" Grid.Row="2"/>
</Grid>
如何使 BorderThickness 填充整个网格行。我是否应该首先使用边框作为 ControlTemplate 内容?
你应该写
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}">
<ContentPresenter
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>