WPF UI元素定义了宽度和高度,背景设置为图像画笔,并在运行时将图像源指向一些随机图像。拉伸属性未设置,因此我假设它是默认值"填充"发挥作用。由于控制尺寸和图像尺寸不同,在运行时,背景图像画笔填充一些纵横比,即在控件内部填充(视觉上)。有没有办法获得这个填充值?
示例代码:
<Grid Width="2000" Height="2000">
<ListBox>
<ListBox.Background>
<ImageBrush ImageSource="{Binding Source={x:Static local:MyModel.Instance},Path=ImageSource,Converter={StaticResource pathImageConverter}}" />
</ListBox.Background>
</ListBox>
</Grid>
如果我使用颜色而不是图像画笔,它会填充整个区域。但是如果我使用的图像说5000 * 4000尺寸,它会稍微伸展以填充空间(没有倾斜和裁剪)。这不是真正的填充,从视觉上我们觉得列表框边界和图像边界有一个填充。让我试着快照一下。
答案 0 :(得分:1)
答案 1 :(得分:1)
没有API来获取这些值,我担心您需要自己进行计算。让我详细说明......
如评论中所示,ImageBrush
不会导致您的填充。画笔将简单地绘制它所获得的区域。当然,根据ImageBrush
的模式,它不会绘制整个区域,而只是一部分。将画笔更改为SolidColorBrush
将显示画笔将获得的整个区域。这应该与图像画笔填充的区域相同,如果它被放入......好,Fill
模式。
然而,我非常怀疑它是刷子,而是ControlTemplate
的{{1}}。如果您在Aero主题中运行,默认情况下,模板以ListBox
开头,其Border
属性模板绑定回Background
,并执行与ListBox
相同(并且更糟糕的是,它也有一个固定的填充为1,但是,背景是在其上绘制的。)
所以计算&#34;填充&#34;在刷子上,您需要the same执行BorderThickness
:Border
+ BorderThickness
。
但是,如果您在其他主题中运行,或者您的控件已重新设置,那么您的控件模板可能会有所不同,并且计算可能会有所不同......