Windows phone7 : Create a custom button with different background Images for each state

标签 windows windows-phone-7 windows-phone-7.1 expression-blend

在我的 Windows phone7 应用程序中,我只需为按钮的每种状态(正常、鼠标悬停、按下、禁用)创建一个具有不同图像的自定义按钮。

如果我只想为每个状态创建一个具有不同背景颜色的自定义按钮,那么我会按照以下步骤完成。

1. Open the page with Expresion Blend
2. Right click button -> Edit Template -> Edit a copy
3. Select Background (In the "Objects and Timeline" Section)
4. Select each "state" under the "state" tab and start adding backgroung color with the  "Pressed" state from the properties pannel.

* Ultimately Can add this as follows for all the buttons which require this custom style
Style="{StaticResource ButtonStyle1}"

我尝试按照上述步骤以类似的方式为每个状态分配背景图像。

但问题是,当我自动添加一个状态所需的图像时,它也适用于所有其他状态。所以最终它最终会为所有状态添加相同的图像(最后为任何状态添加图像)。

如果有人能解释在 expression blend for windows phone7 中为每个状态创建具有不同图像的自定义按钮必须遵循的步骤,我将非常感激。提前致谢....!!!

最佳答案

添加图像时,基本上是在设置按钮模板的外观,它与按钮状态无关。为了实现您想要的效果,您可以创建一个包含这两个图像的按钮模板,然后使用状态来显示或隐藏相应的图像。

1. Edit Button Template
2. Add images to the Grid level of the template
3. Highlight each image item and Send to Back to make sure they are behind your border/content
4. Select a State (e.g. Normal, Pressed), highlight one of the images and set the Visibility property to Visible.  Highlight the other image and set the Visibility property to Collapsed.
5. Select the other States and do something similar depending on what you what shown.

您的 XAML 应如下所示。为简洁起见,删除了一些内容。

<ControlTemplate TargetType="Button">
<Grid Background="Transparent">
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="CommonStates">            
        <VisualState x:Name="Normal">
            <Storyboard>
                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="image1">
                    <DiscreteObjectKeyFrame KeyTime="0">
                        <DiscreteObjectKeyFrame.Value>
                            <Visibility>Visible</Visibility>
                        </DiscreteObjectKeyFrame.Value>
                    </DiscreteObjectKeyFrame>
                </ObjectAnimationUsingKeyFrames>
                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="image2">
                    <DiscreteObjectKeyFrame KeyTime="0">
                        <DiscreteObjectKeyFrame.Value>
                            <Visibility>Collapsed</Visibility>
                        </DiscreteObjectKeyFrame.Value>
                    </DiscreteObjectKeyFrame>
                </ObjectAnimationUsingKeyFrames>
            </Storyboard>
        </VisualState>
        <VisualState x:Name="Pressed">
            <Storyboard>
                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="image1">
                    <DiscreteObjectKeyFrame KeyTime="0">
                        <DiscreteObjectKeyFrame.Value>
                            <Visibility>Collapsed</Visibility>
                        </DiscreteObjectKeyFrame.Value>
                    </DiscreteObjectKeyFrame>
                </ObjectAnimationUsingKeyFrames>
                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="image2">
                    <DiscreteObjectKeyFrame KeyTime="0">
                        <DiscreteObjectKeyFrame.Value>
                            <Visibility>Visible</Visibility>
                        </DiscreteObjectKeyFrame.Value>
                    </DiscreteObjectKeyFrame>
                </ObjectAnimationUsingKeyFrames>
            </Storyboard>
        </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Image x:Name="image1" HorizontalAlignment="Left" Margin="0,0,0,24" Source="/Images/image1.png" Stretch="Fill" Width="48"/>
    <Image x:Name="image2" HorizontalAlignment="Left" Margin="0,0,0,24" Source="/Images/image2.png" Stretch="Fill" Width="48"/>
    <Border x:Name="ButtonBackground" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="0" Margin="{StaticResource PhoneTouchTargetOverhang}">
        <ContentControl x:Name="ContentContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
    </Border>
</Grid>

关于Windows phone7 : Create a custom button with different background Images for each state,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12059079/

相关文章:

c++ - 如何确保我的进程永远不会将另一个进程锁定在文件之外?

windows-phone-7 - 在必应 map 上画画?

c# - 如何倒序显示 LongListSelector 的项目?

c# - 如何反序列化此 JSON 以访问其中的每条数据?

c# - Windows Phone 应用程序有类似 snoop 的工具吗?

c# - 使用具有多个后代的 Linq 解析 XML

c# - 故障排除 : does not contain a static 'main' method suitable for an entry point

windows - 如何修复 Eclipse 深色主题中选定文本项的黑色前景色

windows - Windows 10 : "CheckForUpdateImpl: Couldn' t write out staging user ID, 上的 SourceTree 安装失败此用户可能不应该获得任何测试版:“

c# - 最接近匹配的 Linq 搜索结果