Привязка прямоугольной заливки к линейной градиентной кисти - PullRequest
0 голосов
/ 27 октября 2011

У меня есть прямоугольник, цвет заливки которого определяется MultiBindingConverter из RGB-ползунков.

        <Rectangle.Fill>
            <SolidColorBrush>
                <SolidColorBrush.Color>
                    <MultiBinding Converter="{StaticResource RgbConverter}">
                        <Binding Path="Value" ElementName="RSlider" />      
                        <Binding Path="Value" ElementName="GSlider" />
                        <Binding Path="Value" ElementName="BSlider" />
                    </MultiBinding>
                </SolidColorBrush.Color>
            </SolidColorBrush>
        </Rectangle.Fill>

Теперь я хочу сделать этот "выбранный" цвет GradientStop

        <Rectangle.Fill>
            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                <GradientStop Offset="0" Color="Black" />
                <GradientStop Offset="1" Color="{here bind the color}" />
            </LinearGradientBrush>
        </Rectangle.Fill>

Я пробовал через ObjectDataProvider

    <ObjectDataProvider ObjectInstance="{StaticResource ResourceKey=cColor}" MethodName="ChosenColor" x:Key="chColor" >
    </ObjectDataProvider>

, где ChosenColor - метод расширения:

    public static Color ChosenColor(this Rectangle rect)
    {
        return ((SolidColorBrush)rect.Fill).Color;
    }

но не повезло.Как это сделать?

Ответы [ 2 ]

1 голос
/ 27 октября 2011

Если я правильно понимаю, ваш конвертер возвращает Color.Вы должны иметь возможность указать цвет GradientStop так же, как вы указали цвет SolidColorBrush:

<Rectangle.Fill>
    <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
        <GradientStop Offset="0" Color="Black" />
        <GradientStop Offset="1">
            <GradientStop.Color>
                <MultiBinding Converter="{StaticResource RgbConverter}">
                    <Binding Path="Value" ElementName="RSlider" />      
                    <Binding Path="Value" ElementName="GSlider" />
                    <Binding Path="Value" ElementName="BSlider" />
                </MultiBinding>
            </GradientStop.Color>
        </GradientStop>
    </LinearGradientBrush>
</Rectangle.Fill>
1 голос
/ 27 октября 2011

Вы можете привязать непосредственно к свойству Fill.Color другого Rectangle, как это -

Предполагая, что ваше первое имя Rectangle равно rectangle1

<Rectangle.Fill>
  <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
     <GradientStop Offset="0" Color="Black" />
     <GradientStop Offset="1" Color="{Binding ElementName=rct, Path=Fill.Color}" />
   </LinearGradientBrush>
</Rectangle.Fill>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...