微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何定位嵌套 ControlTemplates 中的元素

如何解决如何定位嵌套 ControlTemplates 中的元素

在我的自定义组合框的样式中,我想在 BackgroundBorder 中更改 ToggleButton 元素的 ControlTemplate 属性属性设置为 true 但我遇到了针对 ComboBox.IsEditable错误

找不到触发器目标。 (目标必须出现在任何使用它的 Setter、触发器或条件之前。)

我尝试过的事情:

  • 名称定位边界:Border
  • 将边框定位为 ToggleButton 的子级:TargetName="Border"

我在网上能找到的唯一信息是:

TargetName 仅在一个 ControlTemplate 部分内运行

但我不确定这是否与我的情况相关,因为 TargetName="ToggleButton.Border"ToggleButtons 是我的自定义组合框的 ControlTemplate 的子项。

样式(为简洁起见,删除了不相关的代码

ControlTemplate

解决方法

不是在嵌套模板上设置值,而是相反,通过 relative source binding 绑定嵌套模板中父 IsEditableCustomComboBox 属性。如果属性为 DataTrigger,请使用 BorderGreen 的颜色设置为 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 举报,一经查实,本站将立刻删除。