我正在尝试通过XAML将图像设置为按钮的背景。我有一个转换图标路径的值转换器并返回一个位图图像
public static BitmapImage GetImage(String name)
{
//return new BitmapImage from the location of the Path
}
我尝试将Image对象直接设置为Button的内容但是没有用。然后我尝试在Button.BackGround中设置ImageBrush标签的源,但仍然无效。
<Button Margin="3" HorizontalAlignment="Stretch" Grid.Row="1" Grid.Column="0">
<Button.Background>
<ImageBrush ImageSource="{Binding Path=IconPath, Converter={StaticResource ImageSourceConverter}}" />
</Button.Background>
</Button>
它并不特别是转换器的问题,因为Same逻辑用于在我的treeview节点中显示图像。我在这里做错了什么?
答案 0 :(得分:5)
如果我理解你的话,最初你想将按钮的内容绑定到一个图标:
<Button Grid.Column="1">
<Button.Content>
<Image Source="{Binding IconPath, PresentationTraceSources.TraceLevel=High}" />
</Button.Content>
</Button>
修改强>:
添加了DataBinding的调试。
答案 1 :(得分:3)
我不确定转换器在做什么。简单地将IconPath
绑定到ImageBrush.ImageSource
应该可以直接使用而无需转换器。
如果它不起作用,那么尝试在Button的内容中设置一些面板,并将Panel的背景设置为ImageBrush。像这样......
<Button>
<Grid>
<Grid.Background>
<ImageBrush ImageSource="../mypath/myimage.png"/>
</Grid.Background>
</Grid>
</Button>
答案 2 :(得分:1)
很难说,我怀疑绑定失败,你的DataContext可能是错误的,在转换器中设置断点并查看传入的值,除此之外,请参阅提供更多建议的this article on debugging。
答案 3 :(得分:1)
我不确定,但我可以提供一些有用的信息。
最近我尝试做一些更简单的事情:更改按钮上的背景颜色 - 实际上是ToggleButton。我发现在代码中设置ToggleButton的Background属性并没有达到我的预期。这让我感到惊讶。搜索,你会看到“我如何设置ToggleButton的背景?”这是一个常见的问题,似乎没有简单的答案。我已经知道为什么它如此复杂。
ToggleButton有一个ControlTemplate,它提供正在运行的东西的视觉外观。在默认的ControlTemplate中,有为各种状态转换提供的动画。当按下按钮时,会有一个WPF执行的动画(我相信这是针对WPF4,Silverlight,并且不确定以前的版本)。当你悬停时,还有另一个动画。等等。 Button also has a ControlTemplate。有一种称为VisualStateManager的东西可以帮助管理所有这些动画。
每个动画中使用的颜色很多,都是硬编码到默认(隐式)模板中,而不是由命名属性公开。如果不打开ControlTemplate的引擎盖,就无法更改它们。 Background属性在所有这些动画的外观中只起很小的作用。换句话说,背景不会做你所期望的。
你可能遇到了同样的事情。我不是WPF专家,这就是我对冲的原因。
获得所需内容的可能方法:
而不是设置背景,设置属性BorderBrush
。这是用来画画的画笔
按钮,在默认的ControlTemplate中,我想。
创建您自己的控件,更简单,没有ControlTemplate中的动画,并允许背景按您的意愿运行。
创建一个修改过的ControlTemplate,并将其作为样式应用于页面中的按钮。 Here's an introduction