我有这个XAML代码( ErdMenuItem.xaml ):
<UserControl x:Class="ErdBuilder.ErdMenuItem"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:erdBuilder="clr-namespace:ErdBuilder"
x:Name="UserControl">
<UserControl.Resources>
<erdBuilder:ByteImageConverter x:Key="imageConverter" />
</UserControl.Resources>
<Image Source="{Binding Converter={StaticResource imageConverter}, ElementName=UserControl, Path=Icon}" />
</UserControl>
如果我写:
<Image Source="{Binding Converter={StaticResource imageConverter}, ElementName=UserControl, Path=Icon}" />
然后转换器将不会被执行 - 我在转换器中使用断点。但如果我使用它:
<Image Source="{Binding Converter={StaticResource imageConverter}}" />
然后转换器将被执行。 图标是字符串类型的依赖项属性。我不知道为什么在我添加DependencyProperty时不会执行Converter,这应该带来我想要转换的Value。任何想法?
图标在这里( ErdMenuItem.xaml.cs ):
namespace ErdBuilder
{
public partial class ErdMenuItem
{
public static readonly DependencyProperty IconProperty = DependencyProperty.Register("Icon", typeof(string), typeof(ErdMenuItem), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure));
public string Icon
{
get { return (string)GetValue(IconProperty); }
set { SetValue(IconProperty, value); }
}
}
}
答案 0 :(得分:0)
那是因为DataContext
中没有数据。绑定表达式返回当前DataContext
的值。您可以使用DataContext
表达式为Image
设置{Binding Converter={StaticResource imageConverter}, Path=Icon}
,或将其设置为根元素(在您的情况下为UserControl
)。此选项更好,因为您可以使用RelativeSource
表达式来避免使用显式名称。
<UserControl x:Class="ErdBuilder.ErdMenuItem"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:erdBuilder="clr-namespace:ErdBuilder"
x:Name="UserControl"
DataContext="{Binding RelateSource={RelativeSource Self}}">