ControlTemplate按钮带图像 - Silverlight for WP7

时间:2013-03-11 21:07:55

标签: silverlight windows-phone-7 user-controls custom-controls controltemplate

我有一个针对按钮控件的ControlTemplate。 ControlTemplate有两个正常和按下状态的图像,每个图像一个。我想在屏幕上的8个不同按钮中使用这个ControlTemplate,每个按钮前面都有不同的图像。

<ControlTemplate x:Key="ButtonControlTemplate1" TargetType="Button">
        <Grid>
            <VisualStateManager.VisualStateGroups>
                <VisualStateGroup x:Name="CommonStates1">
                    <VisualState x:Name="Pressed1">
                        <Storyboard>
                            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="image">
                                <DiscreteObjectKeyFrame KeyTime="0">
                                    <DiscreteObjectKeyFrame.Value>
                                        <Visibility>Collapsed</Visibility>
                                    </DiscreteObjectKeyFrame.Value>
                                </DiscreteObjectKeyFrame>
                            </ObjectAnimationUsingKeyFrames>
                            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="image1">
                                <DiscreteObjectKeyFrame KeyTime="0">
                                    <DiscreteObjectKeyFrame.Value>
                                        <Visibility>Visible</Visibility>
                                    </DiscreteObjectKeyFrame.Value>
                                </DiscreteObjectKeyFrame>
                            </ObjectAnimationUsingKeyFrames>
                        </Storyboard>
                    </VisualState>
                    <VisualState x:Name="Normal1"/>
                    <VisualState x:Name="Disabled1"/>
                    <VisualState x:Name="MouseOver1"/>
                </VisualStateGroup>
                <VisualStateGroup x:Name="FocusStates1">
                    <VisualState x:Name="Focused1"/>
                </VisualStateGroup>
                <VisualStateGroup x:Name="CommonStates"/>
                <VisualStateGroup x:Name="FocusStates"/>
            </VisualStateManager.VisualStateGroups>
            <Image x:Name="image" Source="source1" />
            <Image x:Name="image1" Source="source2" Visibility="Collapsed"/>
        </Grid>
    </ControlTemplate>

如何在模板中放置第三个图像,以便为每个按钮接收不同的来源?

这样的事情:

<Button Template="{StaticResource ButtonControlTemplate1}" thirdImage="source_to_third_image"/>

2 个答案:

答案 0 :(得分:0)

根据我在您的问题中所理解的,您正在寻求实施attached properties

由于按钮本身不携带三个独立图像源的属性(你可能会破解Content属性,但这会很麻烦),你需要实现这些属性并简单地执行标准绑定模板。

答案 1 :(得分:0)

为什么不将Content属性用于第三张图片?

您的ControlTemplate将如下所示:

<ControlTemplate x:Key="ButtonControlTemplate1" TargetType="Button">
    <Grid>
        ...
        <ContentPresenter Content="{TemplateBinding Content}" />
        <Image x:Name="image" Source="source1" />
        <Image x:Name="image1" Source="source2" Visibility="Collapsed"/>
    </Grid>
</ControlTemplate>

您的按钮声明将如下所示:

<Button>
    <Image Source="source3" />
</Button>

然后你只需要添加一个相关的视觉状态。