Правильная ссылка на путь для параметра конвертера multiBinding с контролем выпадающего списка - PullRequest
0 голосов
/ 23 марта 2012

Имея всю информацию о стилях элементов управления, а также информацию о вложенных элементах управления, шаблонах и триггерах, я пытаюсь выяснить следующее.

Взять элемент управления в выпадающем списке.он имеет шаблон управления для компонента кнопки переключения, который показывает нормальное отображение на стандартном дисплее (не в раскрывающемся режиме), который показывает значение дисплея и кнопку переключения для активации раскрывающегося списка.

<ControlTemplate TargetType="ToggleButton" x:Key="baseComboBoxToggleButton" >
   <!-- overall border covering left side display value and the actual toggle button -->
   <Border x:Name="Border" Grid.ColumnSpan="2" />

   <!-- area in left side (column=0) that shows the DISPLAY value -->
   <Border x:Name="ShowDisplayValueArea" Grid.Column="0" />

   <!-- second column using a path to draw the glyph down arrow -->
   <Path Grid.Column="1" />

   <Triggers for the toggle button ... />
</ControlTemplate>

Затем, у вас есть основной элемент управления со списком, который использует шаблон кнопки переключения выше

<ControlTemplate TargetType="ComboBox" x:Key="ComboBoxGridControlTemplate" >
   <Grid>
      <ToggleButton Name="ToggleButton" 
                    Template="{StaticResource baseComboBoxToggleButton}" 
                    ... />
   </Grid>
</ControlTemplate>

Итак, я пытаюсь КРАЙНЕ изменить цвет фона «ShowDisplayValueArea» на основе результатов конвертера MultiBinding,Если я помещаю мультисвязывающий преобразователь в область шаблона элемента управления toggleButton, например ..

<MultiBinding Converter="{StaticResource myMultiParmConverter}">
   <Binding Path="." RelativeSource="{RelativeSource Self}" />
</MultiBinding>

Первое «значение» в массиве объекта значений правильно передает экземпляр шаблона элемента управления с помощью кнопки-переключателя.Вся ссылка на объект, а не только имя.

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

Итак, как я скажу параметру Binding передать фактический Combobox, из которого получена кнопка переключения (т. Е. Родительский элемент для кнопки переключения), поэтому яполучить фактический полный контроль над списком, переданный в качестве параметра.

1 Ответ

0 голосов
/ 23 марта 2012

Нашел его ... совершенно случайно ...

Находясь в отладчике моего класса конвертера, я искал ссылку на объект в окне отладчика.Затем, поскольку это был объект, я щелкнул увеличительное стекло справа от столбца «Значение».Делая так, вызвал "WPF Visualizer" (никогда не использовал / видел это раньше).Так что, увидев это с этой точки зрения, мы увидели, что это «TemplatedParent» - это на самом деле объект, который я хотел.Очевидно, были другие свойства, с которыми я мог бы поиграть в какое-то другое время, но я хотел именно TemplatedParent.

Итак, я изменил привязку с

<Binding Path="." RelativeSource="{RelativeSource Self}" />

на

<Binding Path=".TemplatedParent" RelativeSource="{RelativeSource Self}" />

и правильно получил фактический элемент управления Combobox, переданный в качестве аргумента моему конвертеру.Теперь я могу использовать любые / все свойства выпадающего списка прямо в конвертере, без необходимости явно передавать их все по отдельности.

...