一个Button模板:<Window.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border HorizontalAlignment="Left" Background="{TemplateBinding Background}">
<ContentPresenter />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid >
<Button Content="Button" HorizontalAlignment="Left" Margin="130,238,100,100" VerticalAlignment="Top" Width="100" Click="Button_Click" />
</Grid>private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("fgg");
}
在视图中看到Button是这样的:
Button模板的根元素是一个Border,其中设置了Border的HorizontalAlignment属性值为Left,有如下两个问题:
1:在图中看到的Button,右边是空白的,此部分应该不属于Border部分吧,但它是属于Button部分的吗?如果是的话,为什么点击右边空白部分,没有引发Click事件?
2:设置了Border的HorizontalAlignment属性值为Left,这是相对于父元素的水平对齐方式,可是在模板中Border父元素是什么呢?它又为什么确实是靠左了呢?Border是相对于谁靠左的呢?
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border HorizontalAlignment="Left" Background="{TemplateBinding Background}">
<ContentPresenter />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid >
<Button Content="Button" HorizontalAlignment="Left" Margin="130,238,100,100" VerticalAlignment="Top" Width="100" Click="Button_Click" />
</Grid>private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("fgg");
}
在视图中看到Button是这样的:
Button模板的根元素是一个Border,其中设置了Border的HorizontalAlignment属性值为Left,有如下两个问题:
1:在图中看到的Button,右边是空白的,此部分应该不属于Border部分吧,但它是属于Button部分的吗?如果是的话,为什么点击右边空白部分,没有引发Click事件?
2:设置了Border的HorizontalAlignment属性值为Left,这是相对于父元素的水平对齐方式,可是在模板中Border父元素是什么呢?它又为什么确实是靠左了呢?Border是相对于谁靠左的呢?
2、那个灰色的部分的确是Border的全部,你没设置Border的宽高, 因此是自适应里面的内容的。外面部分是空白无内容,再外面的框是什么不清楚,任何容器都有可能姑且定义为ControlTemplate容器的框框。
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border BorderThickness="1" CornerRadius="2" BorderBrush="Black">
<Border.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFF1F1A4" Offset="0"/>
<GradientStop Color="#FFC1C112" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>帮你改了一下做的更像是按钮了 你那么做是不对的按钮你改的是样式模板 模板内 的ContentPresenter是按钮的内容你的border整个被放到靠左边了 那么它的width就是auto了 你应该什么对其方式都不设定就对劲了
你要是想让按钮被点击后出发click border必须有背景色 如果想透明那就把颜色的alpha设为0就行了而且你在做样式也不是这么简单的做的你还要加入触发器 相应按钮相应的触发动作 然后变换背景颜色 你的问题解释清楚了