在按钮上添加椭圆图像

时间:2019-05-12 14:35:28

标签: c# wpf xaml

我想在Button上添加椭圆图像。但是,当我在Button上添加图片时,Background的{​​{1}}颜色丢失了。我能做什么 ?

Button

想要的: enter image description here

但是结果: enter image description here

2 个答案:

答案 0 :(得分:0)

如果您有一个模板,并且希望该模板呈现目标控件中指定的其他内容,则需要在模板中包含ContentPresenter,以指定应在模板中的何处呈现内容。在ControlTemplate内,需要将其放置在Grid或类似位置。您还需要将渐变背景等移至模板,因为该模板完全接管了目标控件的呈现。

如果这是一个按钮,则只需将渲染移到Button.Content元素中即可。

答案 1 :(得分:0)

Wpf控件不美观。

这意味着它们具有固定的行为,但具有可变的“外观”。该可变外观通过模板处理。设置控件的模板会完全改变其外观。

您的标记替换了通常用椭圆形组成按钮的边框和内容。没有背景可以显示背景。

如果您进行了其他任何开发,则wpf控件的这种无外观特性是很奇怪的。您可以阅读它多次解释,仍然无法“理解”其含义。

本文旨在帮助初学者:

https://social.technet.microsoft.com/wiki/contents/articles/29866.aspx

请注意那里的所有标记,这是按钮的常规控制模板。

使用此按钮很难确定您打算做什么。

如果要将它用于带有不同图片的许多按钮等,则应该子类化按钮并添加依赖项属性或定义具有附加属性的类。无论哪种情况,您都可能希望模板使用这些依赖项属性,以便可以绑定图像源。

处理控件模板的方法是提取默认模板。 (以上链接说明了如何执行此操作)。仔细看看它提供的模板。任何命名的部件都需要以某种方式保留,否则可能会失去功能。就像克里斯说的那样,该按钮是一个contentcontrol,如果您仍然希望任何内容都可以工作,则您需要在新模板中的某个位置提供内容演示者。

您似乎没有任何内容,所以也许您不需要。

这里的另一个复杂之处是椭圆形,它通常会伸出您通常希望按钮结束的位置。 您需要在使用按钮或使用相当先进的技术的布局中留出空间。

您可以将椭圆推入装饰器装饰层,并置于其他任何窗口内容之上。

你可以快点n变脏。

我没有你的照片,所以我在这里将椭圆填充设置为红色:

    <Button Height="90"
            Width="200">
        <Button.Resources>
            <Style TargetType="{x:Type Border}">
                <Setter Property="CornerRadius" Value="20"/>
            </Style>
        </Button.Resources>
        <Button.Background>
            <LinearGradientBrush StartPoint="0,0" EndPoint="1,1" >
                <GradientStop Color="#26C885" Offset="0" />
                <GradientStop Color="#109489" Offset="1.0" />
            </LinearGradientBrush>
        </Button.Background>
        <Grid>
            <Ellipse Height="60"
                     Width="60"
                     Fill="Red"
                     >
                <Ellipse.RenderTransform>
                     <TranslateTransform Y="-40" />
                </Ellipse.RenderTransform>
            </Ellipse>
            <TextBlock Text="Stephen King" 
                       FontFamily="Gabriola" 
                       FontSize="20"
                       Margin="0,30,0,0"/>
        </Grid>
    </Button>

rendertransform将椭圆推上并移出控件。

enter image description here

将其粘贴到窗口中,然后旋转起来。

将鼠标悬停在按钮上。

请注意(边框的)背景在鼠标悬停时会变成浅蓝色,以提示用户可以单击该按钮。

这仍然有效,因为我没有替换按钮的模板。

还请注意TextBlock的使用。

在winforms或html中使用标签的地方,通常在wpf中使用TextBlock。 wpf标签不等于其他技术中的标签。