我有这个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,应该带来的价值,我想转换。有什么想法吗?
图标在这里,(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); }
}
}
}发布于 2014-12-13 23:57:17
这是因为DataContext中没有数据。绑定表达式返回当前DataContext的值。可以通过使用DataContext表达式为Image设置{Binding Converter={StaticResource imageConverter}, Path=Icon},也可以为根元素设置{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}}">https://stackoverflow.com/questions/27464866
复制相似问题