1
我有一个组合框,并且模板化了它的控件模板。 Togglebutton是控件模板的一部分。现在,当togglebutton(ex:Checked)引发事件时,我想更改组合框属性(例如:Foreground)。这个怎么做?我们可以使用relativesource来做到这一点吗?如何使用模板子模板上的触发器更改祖先的属性
我有一个组合框,并且模板化了它的控件模板。 Togglebutton是控件模板的一部分。现在,当togglebutton(ex:Checked)引发事件时,我想更改组合框属性(例如:Foreground)。这个怎么做?我们可以使用relativesource来做到这一点吗?如何使用模板子模板上的触发器更改祖先的属性
您可以在ControlTemplate
中使用Trigger
,并使用Trigger.SourceName
属性将ToggleButton
指定为触发源。
例子:
<ControlTemplate ... >
<Grid ... >
<!-- ... -->
<ToggleButton x:Name="btnToggle" ... />
<!-- ... -->
</Grid>
<ControlTemplate.Triggers>
<Trigger SourceName="btnToggle" Property="IsChecked" Value="True">
<Setter Property="Foreground" Value="Red" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
当然,这仅适用于性能,而不是事件,你的要求。但是,可以使用许多属性代替事件,如IsChecked
属性而不是Checked
事件。
欣赏你的答案。但是当它触发时,我希望Combobox的属性被改变(像不透明或前景)而不是togglebutton的属性。无论如何,从togglebutton引用组合框? – funwithcoding 2010-10-14 04:14:42
其实,我认为上面的代码会将ComboBox的'Foreground'设置为'Red'而不是'ToggleButton'。 *您是否尝试过代码?*通常,如果您在“设置器”中未指定“TargetName”,则将其应用于模板化控件,本例中为“ComboBox”。但是,如果使用'Trigger'的'SourceName'属性,这可能不会成立。但是,如果你还没有这样做,你还是应该试一试! – gehho 2010-10-14 05:46:19