gpt4 book ai didi

c# - 当目标是 ImageBrush.ImageSource 时,TemplateBinding 失败

转载 作者:太空狗 更新时间:2023-10-30 01:04:42 27 4
gpt4 key购买 nike

为什么 TemplateBinding 在这种特定情况下似乎失败了?

拿一个基本的扩展按钮:

public class IconButton : Button
{
public ImageSource Icon
{
get { return (ImageSource)GetValue(IconProperty); }
set { SetValue(IconProperty, value); }
}
public static readonly DependencyProperty ImageProperty =
DependencyProperty.Register("Icon", typeof(ImageSource), typeof(IconButton), new PropertyMetadata(null));

public IconButton()
{
DefaultStyleKey = typeof(IconButton);
}
}

控件模板使用 OpacityMask 显示图标:

<Style TargetType="controls:IconButton">
<Setter Property="Width" Value="30" />
<Setter Property="Height" Value="30" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="controls:IconButton">
<Grid>
<Rectangle Fill="{StaticResource PhoneForegroundBrush}"
Width="{TemplateBinding Width}" Height="{TemplateBinding Height}">
<Rectangle.OpacityMask>
<ImageBrush ImageSource="{TemplateBinding Icon}" />
</Rectangle.OpacityMask>
</Rectangle>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

这会无提示地失败——控件显示为实心矩形。如果我使用常规图像而不是 ImageBrush,则绑定(bind)成功:

            <ControlTemplate TargetType="controls:IconButton">
<Grid>
<Image Source="{TemplateBinding Icon}" />
</Grid>
</ControlTemplate>

如果我对图像源路径进行硬编码,它也能正常工作:

            <ControlTemplate TargetType="controls:IconButton">
<Grid>
<Rectangle Fill="{StaticResource PhoneForegroundBrush}"
Width="{TemplateBinding Width}" Height="{TemplateBinding Height}">
<Rectangle.OpacityMask>
<ImageBrush ImageSource="/Images/appbar.next.rest.png" />
</Rectangle.OpacityMask>
</Rectangle>
</Grid>
</ControlTemplate>

那么,为什么 TemplateBindingImageBrush 中失败了?


更新

通过推导(感谢 Chris 的回答),可能的因素是:

不过,我仍然看不出这些点是如何连接起来的......

最佳答案

这里有一个解决方法。奇怪的是,使用 RelativeSource TemplatedParent 绑定(bind)而不是 TemplateBinding 解决了这个问题。

<ImageBrush ImageSource="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Icon}" />

理论上这是完全相同的绑定(bind)...所以,谁知道呢?什么都行。

关于c# - 当目标是 ImageBrush.ImageSource 时,TemplateBinding 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22134281/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com