如何解决如何定位嵌套 ControlTemplates 中的元素
在我的自定义组合框的样式中,我想在 Background
的 Border
中更改 ToggleButton
元素的 ControlTemplate
属性属性设置为 true 但我遇到了针对 ComboBox.IsEditable
的错误:
找不到触发器目标。 (目标必须出现在任何使用它的 Setter、触发器或条件之前。)
我尝试过的事情:
- 按名称定位边界:
Border
- 将边框定位为 ToggleButton 的子级:
TargetName="Border"
我在网上能找到的唯一信息是:
TargetName 仅在一个 ControlTemplate 部分内运行
但我不确定这是否与我的情况相关,因为 TargetName="ToggleButton.Border"
的 ToggleButtons
是我的自定义组合框的 ControlTemplate
的子项。
ControlTemplate
解决方法
不是在嵌套模板上设置值,而是相反,通过 relative source binding 绑定嵌套模板中父 IsEditable
的 CustomComboBox
属性。如果属性为 DataTrigger
,请使用 Border
将 Green
的颜色设置为 True
。
<Style x:Key="{x:Type local:CustomComboBox}" TargetType="{x:Type local:CustomComboBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomComboBox}">
<Grid>
<ToggleButton x:Name="ToggleButton" Focusable="False" ClickMode="Press"
VerticalContentAlignment="Center"
IsChecked="{Binding IsDropDownOpen,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}">
<ToggleButton.Template>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Grid>
<Border x:Name="Border" Grid.ColumnSpan="2"
Background="{Binding Background,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=local:CustomComboBox}}"/>
</Grid>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding IsEditable,AncestorType=local:CustomComboBox}}" Value="True">
<Setter TargetName="Border" Property="Background" Value="Green"/>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</ToggleButton.Template>
</ToggleButton>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。