具有组合框控制的multiBinding转换器参数的正确路径参考

时间:2012-03-23 15:24:48

标签: wpf triggers styles multibinding

围绕控件的所有样式信息,以及嵌套的内容,控件模板和触发器,我试图找出以下内容。

采用组合框控制。它有一个用于切换按钮组件的控制模板,它显示标准显示(非下拉模式)中的正常显示,显示显示值和切换按钮以激活下拉列表。

<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>

所以,我试图根据MultiBinding转换器的结果最终改变“ShowDisplayValueArea”的背景颜色。如果我将多重绑定转换器放在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 :(得分:0)

发现它......完全是偶然的......

在我的转换器类的调试器中,我在调试器窗口中查看对象引用。然后,由于它是一个物体,我点击了“价值”栏右侧的放大镜。这样做了,提出了“WPF Visualizer”(之前从未使用/看过)。因此,从这个角度看,并看到它是“TemplatedParent”实际上是我想要的对象。显然我可以考虑在其他时间使用其他属性,但TemplatedParent是我想要的。

所以,我改变了

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

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

并正确地将实际的Combobox控件作为参数传递给我的转换器。现在,我可以直接在转换器中使用组合框的任何/所有属性,而无需单独明确地传递它们。