没有边框的图像按钮,工作方式类似于工具栏按钮。
没有边框的图像按钮,工作方式类似于工具栏按钮。
我想要一个按钮,它能够:
- 显示一个没有边框、背景和文本的图像
- 如果我通过Tab键聚焦到图像按钮,那么它会显示背景和边框
- 当我将鼠标悬停在上面时,它也会显示背景和边框
我已经尝试了很多不同的方法,但没有一个完全符合我的需求。我尝试在按钮上设置各种属性来使背景和边框透明,但它们仍然显示出来。我还尝试了一个带有自定义控制模板的样式。我不想完全重新设计所有的触发器等来实现按钮在鼠标悬停时的渲染效果。自定义控制模板的最大问题是我会失去所有现有的功能,基本上我需要从头开始构建一个新的控件。
下面是另一个最接近我需求的链接,但它对我来说并没有完全起作用。
How do you completely remove the button border in wpf? - 但是...由于某种原因,悬停效果会卡住。当我将鼠标悬停在图像和按钮边框上时,它会一直停留在那里,直到我点击其他地方。
问题的出现原因是希望创建一个没有边框的图像按钮,并且希望它的行为类似于工具栏按钮。解决方法是重写控件模板,并根据需求进行调整。另一种简单的方法是使用Expression Blend创建一个基于现有模板的新模板,并利用其提供的样式/编写工具,这比手动编写XAML要好得多。
要显示图像而不是文本,只需将图像设置为内容。按钮是一种ContentControl类型的控件,这意味着它可以容纳任何类型的内容(Object)。
默认模板可以在这些页面中找到。需要注意的是,默认模板依赖于特定的主题控件。
虽然有一个仅显示图像的内容模板,但当鼠标悬停在按钮上时,会失去显示按钮效果的视觉高亮效果。所需的只是在正常渲染时隐藏默认边框。
为了实现这一点,仍然需要重写内容模板,包括切换视觉样式的触发器。
然而,这些触发器大多数指向默认模板中的按钮边框控件。所以我尝试了另一种方法,复制了整个默认模板。将内容呈现器替换为绑定到我的ImageButton Image属性的图像源。我将边框控件的透明度设置为0,并将其RenderDefaulted属性设置为false。但是仍然存在一个白色边框。在搜索相关信息时,我发现了这个链接(stackoverflow.com/questions/3364056/…),似乎没有办法去掉这个白色边框,除非基本上构建自己完整独立的控件。
总之,希望有一种更简单的方式来创建一个基本的图像按钮,它在没有悬停或点击时不显示边框或背景。