首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多个参数的ValueConverter

具有多个参数的ValueConverter
EN

Stack Overflow用户
提问于 2014-11-24 13:42:44
回答 2查看 3.4K关注 0票数 0

我正在尝试编写一个控件,该控件具有三个相关属性: value、minimum和maximum。值更改,但最小值和最大值是固定的。

所以我写了一个IMultiValueConverter:

代码语言:javascript
复制
public class AngleMultiConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        double value = (double)values[0];
        double minimum = (double)values[1];
        double maximum = (double)values[2];

        double angle = -150.0 + ((value - minimum) * 300.0 / (maximum - minimum));
        return angle;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

XAML看起来如下(它是一个自定义控件,因此是RelativeSource ):

代码语言:javascript
复制
<RotateTransform.Angle>
    <MultiBinding Converter="{StaticResource angleMultiConverter}">
        <Binding Path="Value" RelativeSource="{RelativeSource AncestorType={x:Type local:KnobControl}}"/>
        <Binding Path="MinimumValue" RelativeSource="{RelativeSource AncestorType={x:Type local:KnobControl}}" Mode="OneWay"/>
        <Binding Path="MaximumValue" RelativeSource="{RelativeSource AncestorType={x:Type local:KnobControl}}" Mode="OneWay"/>
    </MultiBinding>
</RotateTransform.Angle>

这很好,但是ConvertBack呢?我必须传回三个值..。但我只有一个?另外两个是常量,所以我怎么知道它们是什么?

我的另一个解决方案是创建一个名为Angle的依赖属性,它执行自定义控件中的所有工作.但暴露出的角度似乎是错误的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-01 12:55:52

我找到的唯一答案是创建一个名为角形的属性,让它来完成工作,正如我在最初的问题中指出的那样,bonyjoe总结道。

票数 0
EN

Stack Overflow用户

发布于 2014-11-24 16:20:33

如果您的Min和Max值从未改变,那么您只需将它们作为属性在转换器上使用,并使用普通的IValueConverter进行转换,那么您只需要绑定一个值。

您可以在创建时将值传递给转换器,如下所示

代码语言:javascript
复制
<UserControl.Resources>
    <utils:AngleConverter Min="20" Max="2000" x:Key="angleConverter"/>
</UserControl.Resources>

如果您想绑定这些属性,可以使用DependencyObject作为转换器的基类,并创建Min和Max作为依赖属性,而不是标准属性,尽管我从未尝试过这样做。

自定义控制实现

内构造函数

代码语言:javascript
复制
this.Resources.Add("AngleConverter", new AngleConverter() { Min = _min, Max = _max });

在Min/最大值中更改

代码语言:javascript
复制
((AngleConverter)this.Resources["AngleConverter"]).Min = newMin;
((AngleConverter)this.Resources["AngleConverter"]).Max = newMax;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27106277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档