WPF多值转换器(多属性绑定)

52 篇文章 0 订阅

背景:实现Slider拖动可以调整rgb

单转换器:WPF中数据绑定转换器Converter-CSDN博客

在View中:

<StackPanel Orientation="Vertical">
    <Slider x:Name="slider_R" Minimum="0" Maximum="255" Width="200" Margin="20"/>
    <Slider x:Name="slider_G" Minimum="0" Maximum="255" Width="200" Margin="20"/>
    <Slider x:Name="slider_B" Minimum="0" Maximum="255" Width="200" Margin="20"/>

    <Path VerticalAlignment="Center" HorizontalAlignment="Center">
        <Path.Data>
            <EllipseGeometry Center="50, 50" RadiusX="50" RadiusY="50"/>
        </Path.Data>

        <Path.Fill>
            <MultiBinding Converter="{StaticResource rmc}">
                <Binding ElementName="slider_R" Path="Value"/>
                <Binding ElementName="slider_G" Path="Value"/>
                <Binding ElementName="slider_B" Path="Value"/>
            </MultiBinding>
        </Path.Fill>
    </Path>
</StackPanel>

        -- Fill中绑定的资源是Window.Resources中引入进来的转换器key

        -- 转换器返回的是一个SolidBrush,其实就是相当于在这个地方写个SolidBrush

        -- 这里绑定的是Slider的值,但是如果是有值的就直接Path指向那个值就行:

                

<Button.Style>
    <!--单值转换器-->
    <!--<Style TargetType="Button">
        <Setter Property="IsEnabled" Value="{Binding Age, Converter={StaticResource singleConverter}}"/>
    </Style>-->
    <Style TargetType="Button">
        <Setter Property="IsEnabled">
            <Setter.Value>
                <MultiBinding Converter="{StaticResource multiConverter}">
                    <Binding Path="Age"/>
                    <Binding Path="Grade"/>
                </MultiBinding>
            </Setter.Value>
        </Setter>
    </Style>
</Button.Style>

转换器中:

public class rgbMultiConventer : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        if (values==null || values.Length < 2)
        {
            return null;
        }

        byte r = System.Convert.ToByte(values[0]);
        byte g = System.Convert.ToByte(values[1]);
        byte b = System.Convert.ToByte(values[2]);

        Color color = Color.FromRgb(r, g, b);

        return new SolidColorBrush(color);
    }

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

 -- 就是转换器类接上接口“IMultiValueConverter”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值