猿问

为什么 Rectangle.Fill 多重绑定不起作用?

我想创建一个简单的 WPF 应用程序,您可以在其中设置 RGB 颜色(通过 3 个滑块 - 每个通道一个)以及结果填充 Rectangle 的颜色。


当然,仅使用 XAML 就可以做到这一点,因为我想提供来自三个不同值的 Rectangle.Fill,所以我使用了 IMultiValueConverter绑定。


        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)

        {

            return new SolidColorBrush(ExtractColorFrom(values));

        }


        private Color ExtractColorFrom(object[] values)

        {

            byte red = System.Convert.ToByte((double)values[0]);

            byte green = System.Convert.ToByte((double)values[1]);

            byte blue = System.Convert.ToByte((double)values[2]);

            Color color = new Color();

            color.R = red;

            color.G = green;

            color.B = blue;

            return color;

        }

但该绑定不适用于 Rectangle.Fill。 XAML 有问题吗?


HUX布斯
浏览 159回答 1
1回答

MYYA

验证您的 IMultiValueConverter 实现。您可以使用 Color.FromRgb(red, green, blue);对我有用!public class RgbToBrushConverter : IMultiValueConverter{    public RgbToBrushConverter()    {    }    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)    {        var x = ExtractColorFrom(values);        return new SolidColorBrush(x);    }    private Color ExtractColorFrom(object[] values)    {        byte red = System.Convert.ToByte((double)values[0]);        byte green = System.Convert.ToByte((double)values[1]);        byte blue = System.Convert.ToByte((double)values[2]);        return Color.FromRgb(red, green, blue);    }    ///MUST!!!!!    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)    {        throw new NotImplementedException();    }}并检查 Text='R' x 3 ?文本=“G” ,“B” ?
随时随地看视频慕课网APP
我要回答