答案 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将椭圆推上并移出控件。
将其粘贴到窗口中,然后旋转起来。
将鼠标悬停在按钮上。
请注意(边框的)背景在鼠标悬停时会变成浅蓝色,以提示用户可以单击该按钮。
这仍然有效,因为我没有替换按钮的模板。
还请注意TextBlock的使用。
在winforms或html中使用标签的地方,通常在wpf中使用TextBlock。 wpf标签不等于其他技术中的标签。