代码之家  ›  专栏  ›  技术社区  ›  Burt

WPF DataTemplate触发器在不同的DataTemplate中设置属性

  •  0
  • Burt  · 技术社区  · 16 年前

    DataTemplate s(A和;B) 是的。包含 Expander 扩张器的 HeaderTemplate 数据模板

    数据模板

        <DataTemplate x:Key="ProjectExpanderHeader">
            <Border CornerRadius="2,2,0,0" 
                    Background="{StaticResource ItemGradient}"   
                    HorizontalAlignment="{Binding HorizontalAlignment,
                                                  RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContentPresenter}},
                                                  Mode=OneWayToSource}">
                <local:ItemContentsUserControl Height="30"/>
            </Border>
        </DataTemplate>
    

    是否可以设置 CornerRadius Border 当 IsExpanded 扩展器 是否设置为true?

    3 回复  |  直到 15 年前
        1
  •  1
  •   bitbonk    16 年前

    您可以通过引入类型为CornerRadius的新attched属性(例如Helper.CornerRadiusProperty)并将其附加到DataTemplate a中某个ExpanderHeader的父级来实现。您可以使用触发器基于IsExpanded设置此属性。

    <Border CornerRadius="{Binding local:Helper.CornerRadius, 
              RelativeSource={RelativeSource FindAncestor, 
              AncestorType={x:Type ContentPresenter}} ...
    

    上面的示例假设您已在DataTemplate a中的ContentPresenter上设置了Helper.CornerRadius属性。

        2
  •  1
  •   Burt    16 年前

    我找到了解决办法。我在DataTemplateB的触发器中添加了以下代码。它所做的是寻找祖先扩展控件并将CornerRadius属性应用于它。

            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}},Path=IsExpanded}" Value="false">
                    <Setter TargetName="ProjectExpanderHeader" Property="CornerRadius" Value="2,2,2,2"/>
                </DataTrigger>
            </DataTemplate.Triggers>
    
        3
  •  1
  •   esylvestre    16 年前

    为什么不用触发器呢?

    <DataTemplate>
            <Border CornerRadius="2,2,0,0"
                    Background="{StaticResource ItemGradient}"
                    HorizontalAlignment="{Binding HorizontalAlignment,
                                              RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContentPresenter}},
                                              Mode=OneWayToSource}">
    
                <Border.Style>
                    <Style>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding DataTemplateA.IsExpanded}"
                                         Value="True">
                                <Setter Property="Border.CornerRadius"
                                        Value="2,2,0,0" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Border.Style>
                <local:ItemContentsUserControl Height="30" />
            </Border>
        </DataTemplate>
    
    推荐文章