使用ContentPresenter中的图像作为Windows Phone样式的不透明蒙版

时间:2014-07-22 19:18:48

标签: c# .net wpf silverlight windows-phone-8

我在窗口中有这个按钮:

<Button Style="{StaticResource EllipseButton}">
    <Image Source="/Assets/Icons/user.png" />
</Button>

这是一种风格

<Style x:Key="EllipseButton" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
             <ControlTemplate TargetType="Button">
                 <Grid>
                     ...
                     <ContentPresenter x:Name="content"/>
                     <Border Background="Orange">
                         <Border.OpacityMask>
                             <ImageBrush ImageSource="{Binding ElementName=content, Path=Source"/>
                          </Border.OpacityMask>
                     </Border>                           
                 </Grid>
             </ControlTemplate>
         </Setter.Value>
     </Setter>
 </Style>

所以我想显示我用于橙色按钮的任何白色PNG图像。 我怎样才能做到这一点? 感谢。

2 个答案:

答案 0 :(得分:2)

ContentPresenter没有Source属性 - 其Content属性将是Image对象,然后应包含Source ...

<ImageBrush ImageSource="{Binding ElementName=content, Path=Content.Source"/>

如果这不起作用,您也可以尝试绑定到TemplatedParent

<ImageBrush ImageSource="{Binding 
    RelativeSource={RelativeSource TemplatedParent},
    Path=Content.Source}"/>

答案 1 :(得分:1)

还找到了另一种解决方案:

风格:

<Border Background="Orange">
        <Border.OpacityMask>
             <TemplateBinding Property="Content"></TemplateBinding>
         </Border.OpacityMask>
</Border>

和按钮将ImageBrush作为内容:

<Button Style="{StaticResource EllipseButton}">
        <ImageBrush ImageSource="/Assets/Icons/image.png" />
</Button>