我有一组用于自定义控件的数据模板。它运作良好,但我希望能够将它绑定到数据并根据集合的最小值/最大值缩放值。我创建了以下值转换器:
public class ScaleValueConverter : IValueConverter
{
/// <summary>
/// The property to use the value of
/// </summary>
public string ValueProperty { get; set; }
/// <summary>
/// The minimum value to be scaled against. Will become 0%
/// </summary>
public int MinValue { get; set; }
/// <summary>
/// The maximum value to be scaled against. Will become 100%.
/// </summary>
public int MaxValue { get; set; }
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var type = value.GetType();
var property = type.GetProperty(ValueProperty);
if (property == null)
return 0;
var result = System.Convert.ToDecimal(property.GetValue(value, null));
//TODO: Scale stuff
return result + 100;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
目的是拥有一个通用值转换器,并简单地将绑定源对象提供给 XAML 中的值转换器,并让它解决问题。
但是,我不确定如何执行此操作,因为我无法访问从模板控件创建的值转换器。
我正在寻找大致如下工作的东西:
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
//Get Value Converters
var topScaleValueConverter = GetTemplateChild("TopScaleValueConverter");
var bottomScaleValueConverter = GetTemplateChild("BottomScaleValueConverter");
//Setup value converter Min / Max / ValueProperty here
}
理想情况下,它们将成为我模板的一部分,我可以将它们提取为部分,但这似乎不起作用。
谁能指出我让这种行为发挥作用的正确方向?
问候
特里斯坦
编辑:我想能够依赖注入它们会很好。有谁知道这是否可能?