【问题标题】:Datatrigger for Rectangle inside of ControlTemplateControlTemplate 中矩形的数据触发器
【发布时间】:2016-04-12 14:44:45
【问题描述】:

我在 stackoverflow 上看到了很多关于绑定 ControlTemplate.Trigger 的问题,但我没有遇到任何关于绑定到 ControlTemplate 内部控件的 datatrigger 的信息。

在我的ControlTemplate 中,我有一个Rectangle。填充通常是红色的,除非depency property Input1Active 等于 1。我尝试了以下代码,但它似乎无法正常工作。

<Style TargetType="{x:Type local:CustomAxis_IO}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:CustomAxis_IO}">
                <Grid                       
                  <Rectangle Fill="Red">
                    <Rectangle.Style>
                        <Style TargetType="{x:Type Rectangle}">
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Input1Active}" Value="1">
                                    <Setter Property="Fill" Value="Green"/>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </Rectangle.Style>
                   </Rectangle>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

如何将矩形的数据触发器绑定到控件的依赖属性Input1Active

【问题讨论】:

    标签: wpf xaml


    【解决方案1】:

    这可能是因为您正在尝试在样式中进行模板绑定。

    由于您在 ControlTemplate 中,因此无需为触发器使用单独的样式来更改模板中的内容。

    试试这个:

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:CustomAxis_IO}">
                    <Grid>
                        <Rectangle x:Name="InternalRectangle" Fill="Red"/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="Input1Active" Value="1">
                            <Setter TargetName="InternalRectangle" Property="Fill" Value="Green"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    

    使用ControlTemplate.Triggers 并命名模板的某些部分来设置模板的功能更加容易和灵活。

    【讨论】:

      【解决方案2】:

      好的,我解决了我的问题。看来我毕竟需要创建一个ControlTemplate.Trigger 并引用我试图按名称修改的Rectangle

      <Style TargetType="{x:Type local:CustomAxis_IO}">
          <Setter Property="Template">
              <Setter.Value>
                  <ControlTemplate TargetType="{x:Type local:CustomAxis_IO}">
                      <Grid>
      
      
                              <Rectangle Fill="Red" x:Name="Axis1Rect" Width="100" Height="20">
      
                              </Rectangle>
      
                      </Grid>
                      <ControlTemplate.Triggers>
                          <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},Path=Input1Active}" Value="1">
                              <Setter TargetName="Axis1Rect" Property="Fill" Value="Green"/>
                          </DataTrigger>
      
                      </ControlTemplate.Triggers>
                  </ControlTemplate>
      
              </Setter.Value>
          </Setter>
      </Style>
      

      【讨论】:

        猜你喜欢
        • 2018-09-23
        • 1970-01-01
        • 2010-10-31
        • 1970-01-01
        • 1970-01-01
        • 2014-06-25
        • 2017-02-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多