none
XAML RadioButton и установка Style для parent`а через Trigger RRS feed

  • Вопрос

  • <StackPanel>
        <RadioButton GroupName="numgrp1">ААААА</RadioButton>
    </StackPanel>
    <StackPanel>
        <RadioButton GroupName="numgrp1">БББББ</RadioButton>
    </StackPanel>
    <StackPanel>
        <RadioButton GroupName="numgrp1">ВВВВВ</RadioButton>
    </StackPanel>
    <StackPanel>
        <RadioButton GroupName="numgrp1">ГГГГГ</RadioButton>
    </StackPanel>
    <StackPanel>
        <RadioButton GroupName="numgrp1">ДДДДД</RadioButton>
    </StackPanel>
    <StackPanel>
        <RadioButton GroupName="numgrp1">ЕЕЕЕЕ</RadioButton>
    </StackPanel>
    

    Часть разметки приведено выше. Как по IsChecked="True" установить BackGround="Red" у соответсвующего StackPanel используя лишь Trigger в XAML?

    Пробовал и такой вариант

    <Style x:Key="Control">
        <Style.Triggers>
                    <Trigger Property="RadioButton.IsChecked" Value="True">
        <Setter Property="StackPanel.Background" Value="Red"/>
                    </Trigger>
        </Style.Triggers>
    </Style>

    соответственно устанавливая Style="StaticResurce Control" у RadioButton, но Background устанавливается только для RadioButton.

    Помогите решить проблему, голову над этим сломал.

    21 февраля 2013 г. 12:51

Ответы

  • Не очень удачная разметка в примере. Зачем помещать RadioButton в StackPanel, если кроме него там больше никого нет. Если вам нужна обертка которую вы будете красить, то лучше тогда использовать Border, ну или, в идеале, переделать шаблон RadioButton, что бы он выглядел будто находится в контейнере.

    Далее если через триггеры такое и возможно сделать, то это будет страшное зрелище.

    Если вам нужно перекрасить родитель при установке флажка в RadioButton самый идеальный вариант это привязка. То есть Background привязываете к IsChecked нужного RadioButton, а в конвертере в зависимости от значения возвращаете цвет.


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа rz3rr 22 февраля 2013 г. 5:31
    21 февраля 2013 г. 13:59
    Отвечающий

Все ответы

  • Смысл в StackPanel помещать один элемент RadioButton? Лучше сделать Template для RadioButton в котором сделать дополнительную внешнюю границу (взамен StackPanel) и через триггеры разукрашивать ее.
    • Предложено в качестве ответа Varlamov Oleg 21 февраля 2013 г. 13:59
    • Отменено предложение в качестве ответа Varlamov Oleg 21 февраля 2013 г. 13:59
    21 февраля 2013 г. 13:53
  • Не очень удачная разметка в примере. Зачем помещать RadioButton в StackPanel, если кроме него там больше никого нет. Если вам нужна обертка которую вы будете красить, то лучше тогда использовать Border, ну или, в идеале, переделать шаблон RadioButton, что бы он выглядел будто находится в контейнере.

    Далее если через триггеры такое и возможно сделать, то это будет страшное зрелище.

    Если вам нужно перекрасить родитель при установке флажка в RadioButton самый идеальный вариант это привязка. То есть Background привязываете к IsChecked нужного RadioButton, а в конвертере в зависимости от значения возвращаете цвет.


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа rz3rr 22 февраля 2013 г. 5:31
    21 февраля 2013 г. 13:59
    Отвечающий
  • Спасибо, LXGDARK. Именно так и сделал. Через конвертер. Просто, думал, есть что-то "по проще" :)

    22 февраля 2013 г. 7:10
  • Оказывается есть и проще: через ControlTemplate добраться до BulletDecorator и разукрашивать его Background через ControlTemplate.Triggers.

    BulletDecorator охватывает и визуальное отображение "кружка" радиобуттона и его текст.

    13 марта 2013 г. 11:20