Silverlight 设置按钮内部矩形的填充并设置动画';内容模板

Silverlight 设置按钮内部矩形的填充并设置动画';内容模板,silverlight,windows-phone-7,xaml,button,windows-phone,Silverlight,Windows Phone 7,Xaml,Button,Windows Phone,我在WP7项目中工作。 我已经定义了许多ContentTemplates来设置按钮的样式。 这些ContentPlate包括形状(为了简单起见,让我们使用矩形): 不幸的是,在WP,这种方法无法工作。原因是WP的ContentPresenter没有ForegroundProperty,而WinRT有 因此,我尝试在ContentPresenter中定义我自己的附加DP,并在按钮模板中使用它: 按钮.模板>>内容控件.模板>> 这将在SL5或WPF中工作 如果您转到按钮而不是ContentPres

我在WP7项目中工作。 我已经定义了许多ContentTemplates来设置按钮的样式。 这些ContentPlate包括形状(为了简单起见,让我们使用矩形):

不幸的是,在WP,这种方法无法工作。原因是WP的ContentPresenter没有ForegroundProperty,而WinRT有

因此,我尝试在ContentPresenter中定义我自己的附加DP,并在按钮模板中使用它:

按钮.模板>>内容控件.模板>>


这将在SL5或WPF中工作

如果您转到
按钮而不是
ContentPresenter
,相对源代码方法将正常工作

Fill="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType=Button}}"
如果您需要相同的模板来处理其他类型的按钮,例如,
RepeatButton
ToggleButton
等,您还可以定义
anteStorType=ButtonBase

编辑: 这是针对SL3/4或WP7的黑客攻击

TextBlock
放入
DataTemplate
并绑定到其前景

<DataTemplate>
    <Grid>
        <TextBlock x:Name="ForegroundProvider" Width="0" Height="0" Opacity="0"/>
        <Path Fill="{Binding Foreground, ElementName=ForegroundProvider}" ..../>
    </Grid>
</DataTemplate>


很难看,但那是WP7…:(

1.不幸的是,WP7中不支持RelativeSource FindAncestor(仅支持Self和TemplatedParent)2.恐怕是按钮。前台不是要绑定到的正确属性。如果查看按钮模板,您会看到按钮状态更改ContentControl的前台保存按钮内容,而不是按钮本身1.忽略了一个事实,即它是WP7…请参见编辑的答案。2.在这种情况下(在SL4/5或具有相同模板的WPF下)使用
AncestorType=ContentControl
。感谢您的时间。不幸的是,Textblock前台黑客没有遵循按钮按下和禁用状态。当我按下按钮时,其背景和前景会发生变化。我确实希望这些变化反映在内容中的形状中。否则我会使用硬编码颜色。以防万一-I want表示,Windows Phone 7.5是Silverlight 4,而不是Silverlight 3。AFAIK SL4没有FindAndestor too抱歉,我总是搞砸什么版本有什么功能,对我来说版本太多:)。重新编辑了答案。
<ContentPresenter 
    local:FrameworkElementExtensions.Foreground="{TemplateBinding Foreground}"
Fill="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType=Button}}"
<DataTemplate>
    <Grid>
        <TextBlock x:Name="ForegroundProvider" Width="0" Height="0" Opacity="0"/>
        <Path Fill="{Binding Foreground, ElementName=ForegroundProvider}" ..../>
    </Grid>
</DataTemplate>