Как инвертировать цвета пользовательского элемента управления WPF - PullRequest
1 голос
/ 25 июля 2010

Я создаю пользовательский элемент управления для своего приложения WPF, и я хотел бы знать, как я могу инвертировать цвета элемента управления при нажатии на него.Я получил его, чтобы реагировать на щелчки мышью, но когда я пытаюсь поменять местами кисти фона и переднего плана, меняется только цвет фона.Элемент управления является штампом, и я хочу, чтобы цвета были инвертированы при его выборе.Я создал матрицы, используя сетку в шаблоне элемента управления и поместив эллипсы с их кистями заполнения, установленными в {TemplateBinding Foreground}.Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 25 июля 2010

Вы можете использовать пиксельный шейдер, посмотрите, например, http://wpffx.codeplex.com/

он имеет инвертированный цвет, который вы можете применить

0 голосов
/ 25 июля 2010

Поместите в свой шаблон триггер, который заменит {TemplateBinding Foreground} на "{Binding Background, RelativeSource={RelativeSource TemplatedParent}}" и наоборот, когда ваш элемент управления находится в выбранном состоянии. Вы не можете использовать TemplateBinding из сеттера, поэтому вам нужно использовать обычную привязку с RelativeSource of TemplatedParent. Вот пример CheckBox с TextBlock, который инвертирует цвета при проверке:

<CheckBox Foreground="Blue" Background="LightGreen">
    <ContentControl.Template>
        <ControlTemplate TargetType="CheckBox">
            <TextBlock Name="TextBlock"
                        Background="{TemplateBinding Background}"
                        Foreground="{TemplateBinding Foreground}"
                        Text="Text">
            </TextBlock>
            <ControlTemplate.Triggers>
                <Trigger Property="IsChecked" Value="True">
                    <Setter TargetName="TextBlock" Property="Background"
Value="{Binding Foreground, RelativeSource={RelativeSource TemplatedParent}}"/>
                    <Setter TargetName="TextBlock" Property="Foreground"
Value="{Binding Background, RelativeSource={RelativeSource TemplatedParent}}"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </ContentControl.Template>
</CheckBox>
...