Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在嵌套的ControlTemplates中以元素为目标_C#_Wpf_Xaml_Controltemplate - Fatal编程技术网

C# 如何在嵌套的ControlTemplates中以元素为目标

C# 如何在嵌套的ControlTemplates中以元素为目标,c#,wpf,xaml,controltemplate,C#,Wpf,Xaml,Controltemplate,在自定义组合框的样式中,当组合框.IsEditable属性设置为true时,我想更改切换按钮控制模板中边框元素的背景属性,但针对边框运行此错误: 找不到触发器目标。(目标必须出现在使用它的任何设置器、触发器或条件之前。) 我尝试过的事情: 按名称定位边框:TargetName=“Border” 将边框作为ToggleButton的子对象:TargetName=“ToggleButton.Border” 我能在网上找到的唯一信息是: TargetName仅在一个ControlTemplate部

在自定义组合框的样式中,当
组合框.IsEditable
属性设置为true时,我想更改
切换按钮
控制模板中
边框
元素的
背景
属性,但针对
边框运行此错误:

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

我尝试过的事情:

  • 按名称定位边框:
    TargetName=“Border”
  • 将边框作为ToggleButton的子对象:
    TargetName=“ToggleButton.Border”
我能在网上找到的唯一信息是:

TargetName仅在一个ControlTemplate部分中操作

但我不确定这是否与我的情况有关,因为
切换按钮
控制模板
是我自定义组合框的
控制模板的子项

风格(为简洁起见,删除了不相关的代码)


与其在嵌套模板上设置值,不如用另一种方法,通过一个。如果属性为
True
,则使用
DataTrigger
边框的颜色设置为
绿色

<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, RelativeSource={RelativeSource Mode=FindAncestor, 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>


在ToggleButton中没有
边框
属性。无论如何,在这种情况下,您不需要使用
TargetName=“ToggleButton.Border”
@emoacht Border是ToggleButton的ControlTemplate中的Border元素的名称。请解释我如何更改边框元素的背景属性而不在触发器中将其作为目标?如果未给出
TargetName
,则目标将是local:CustomComboBox本身。然后在“Border”的Border.Background和local:CustomComboBox.Background之间设置绑定。相应地,此触发器将更改local:CustomComboBox.Background,然后该值将反映到“Border”的Border.Background。就这样。谢谢你的帮助,这完全解决了我的问题。另外,谢谢你花时间编辑我的问题,告诉我问题出在哪里,为什么我被否决。
<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, RelativeSource={RelativeSource Mode=FindAncestor, 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>