2012-05-24 1 views
0

Стандартный RadioButton не поддерживает настройку цвета эллипса. Итак, я взял шаблон RadioButton из этого места в качестве основы для настраиваемого RadioButton: RadioButton Styles and TemplatesWPF change dynamicresource в codebehind

<Ellipse.Fill> 
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> 
    <LinearGradientBrush.GradientStops> 
     <GradientStopCollection> 
      <GradientStop Color="{DynamicResource ControlLightColor}" /> 
      <GradientStop Color="{DynamicResource ControlMediumColor}" Offset="1.0" /> 
     </GradientStopCollection> 
    </LinearGradientBrush.GradientStops> 
</LinearGradientBrush> 

ControlLightColor и ControlMediumColor определяются как:

<Color x:Key="ControlLightColor">#ffff9a</Color> 
<Color x:Key="ControlMediumColor">#ffff9a</Color> 

Который дает нам желтый - эллипс.

Как я могу изменить этот цвет в кодебе?

Решение:

<Ellipse x:Name="Border" StrokeThickness="1" Fill="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.RadioButtonColor}"> 

     Public ReadOnly Property RadioButtonColor() As SolidColorBrush 
     Get 
      Dim solidColorBrush As SolidColorBrush 

      If MyBusinessLogic Then 
       solidColorBrush = _radioButtonNotRequiredBrush 
      Else 
       solidColorBrush = _radioButtonRequiredBrush 
      End If 

      Return solidColorBrush 
     End Get 
    End Property 

Недурно для JRB думать вместе.

С уважением,

Michel

+1

Nice one ......! – jrb

ответ

0

Добавлено решение моего вопроса, см. Выше.

0

Создание стиля следуя: Creating a Style in code behind

затем назначить его на element.Style

Вы также можете получить доступ к ресурсам по

Resources["mykey"] 
+0

Я обновил Application.Current.Resources («ControlLightColor») с другим цветом, ничего не происходит. Я также сделал RaisePropertyChanged на моем связывающем элементе, также не работает. –

+0

Возможно, вам нужно вызвать InitializeComponent(); Скорее всего, лучше собрать два стиля и просто сменить стиль. Или привяжите цвет gradientstop к свойству (MVVM). – jrb

+0

GradientStop не является связываемым, это не элемент FrameworkElement. –