在wpf和混合中使用自定义框架的按钮

时间:2014-08-07 10:41:03

标签: wpf blend

我想在blend或wpf中创建一个自定义形状框架的按钮。目标是用图像完全填充按钮。我该怎么做。我希望我的按钮就像图像一样。

<Button x:Name="btn_Part3" Content="Button" Margin="107,593,1075,40" Style="{DynamicResource ButtonStyle2}" Click="btn_Part3_Click"/>

我的风格将是

<Style x:Key="btn_Part3" TargetType="{x:Type Button}"/>
    <Style x:Key="btn_P3" TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid Margin="11.673,79.49,155.327,20.51">
                        <Image Source="3.png" Stretch="Fill" Margin="68.688,-123.48,43.312,203.98"/>
                        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="74.688,-119.94,48.188,203.98" Width="10.124" Content="3"/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsFocused" Value="True"/>
                        <Trigger Property="IsDefaulted" Value="True"/>
                        <Trigger Property="IsMouseOver" Value="True"/>
                        <Trigger Property="IsPressed" Value="True"/>
                        <Trigger Property="IsEnabled" Value="False"/>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

这是由混合生成的 tnx为你的帮助和srry为坏英语

1 个答案:

答案 0 :(得分:1)

您发布的代码中存在许多错误。

我真诚地建议您在MSDN上阅读有关Styling and Templating的更多信息。

为了解决您的问题,请将ControlTemplate Grid更改为以下内容。基本上删除控件模板中的所有边距并将网格背景设置为透明。这将解决您的问题。但就像我建议您在查看代码之后继续阅读之前需要阅读有关样式和模板的内容。

<Grid  Background="Transparent">
                            <Image Source="3.png" Stretch="Fill"  />
                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"  Width="10.124" Content="3"/>
                        </Grid>

总结一下

  1. 你不应该在混合中拖动控件来定位它们。使用适当的容器和定位系统(网格,帆布,堆叠板等)
  2. 您的控件模板中有触发器,但没有设置器。 (如果不使用它们,也可以删除触发器)
  3. 请再次阅读:)