所以,问题是资源不是可视化树的一部分。要实现这一目标,您必须:
1.使您的ValueConverter继承Freezable
public class CustomConverter : Freezable, IValueConverter
{
public static readonly DependencyProperty LookupItemsProperty =
DependencyProperty.Register("LookupItems", typeof(IEnumerable<LookupItem>), typeof(CustomConverter), new PropertyMetadata(default(IEnumerable<LookupItem>)));
public IEnumerable<LookupItem> LookupItems
{
get { return (IEnumerable<LookupItem>)GetValue(LookupItemsProperty); }
set { SetValue(LookupItemsProperty, value); }
}
#region Overrides of Freezable
/// <summary>
/// When implemented in a derived class, creates a new instance of the <see cref="T:System.Windows.Freezable"/> derived class.
/// </summary>
/// <returns>
/// The new instance.
/// </returns>
protected override Freezable CreateInstanceCore()
{
return new CustomConverter();
}
#endregion Overrides of Freezable
// ... Usual IValueConverter stuff ...
}
<UserControl (...) x:Name=myUserControl>
<UserControl.Resources>
<CustomConverter x:Key="customConverter"
LookupItems="{Binding ElementName=myUserControl, Path=DataContext.LookupItems}"/>
</UserControl.Resources>