围绕控件的所有样式信息,以及嵌套的内容,控件模板和触发器,我试图找出以下内容。
采用组合框控制。它有一个用于切换按钮组件的控制模板,它显示标准显示(非下拉模式)中的正常显示,显示显示值和切换按钮以激活下拉列表。
<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(即:切换按钮的父节点),所以我得到实际的整个组合框控件作为参数传递。
答案 0 :(得分:0)
发现它......完全是偶然的......
在我的转换器类的调试器中,我在调试器窗口中查看对象引用。然后,由于它是一个物体,我点击了“价值”栏右侧的放大镜。这样做了,提出了“WPF Visualizer”(之前从未使用/看过)。因此,从这个角度看,并看到它是“TemplatedParent”实际上是我想要的对象。显然我可以考虑在其他时间使用其他属性,但TemplatedParent是我想要的。
所以,我改变了
的绑定<Binding Path="." RelativeSource="{RelativeSource Self}" />
到
<Binding Path=".TemplatedParent" RelativeSource="{RelativeSource Self}" />
并正确地将实际的Combobox控件作为参数传递给我的转换器。现在,我可以直接在转换器中使用组合框的任何/所有属性,而无需单独明确地传递它们。