none
如何将一个DataTrigger和一个Trigger进行组合使用? RRS feed

  • 问题

  • 要为一个DataTemplate配置一个组合触发器,该DataTemplate,是一个Item控件的DataTemplate,是ListViewItem还是其他TabItem不重要。

    内部有一个Button。当鼠标移动到这个Item上,内部Button的某个外观属性会发生变化

    要配置两个条件触发,一个是鼠标移动的IsMouseOver条件触发,另一个是绑定自ViewModel内的泛型集合的内部元素属性的bool属性,属性名为isShow,

    <DataTemplate > <StackPanel Orientation="Horizontal" Background="red" > <!-- 按钮 --> <Button Name="btn" /> </StackPanel> <DataTemplate.Triggers> <MultiTrigger> <MultiTrigger.Conditions> <!-- 如何配置isShow属性为ture按键,显示按钮,如果为false,不显示按钮 -->

    <Condition Property="IsMouseOver"
                                       Value="true"></Condition>

    </MultiTrigger.Conditions> <MultiTrigger.Setters> <Setter Property="Visibility" Value="Visible" TargetName="btn" /> </MultiTrigger.Setters> </MultiTrigger> </DataTemplate.Triggers>

    </DataTemplate>


    当鼠标移动到Item上时,如果该item绑定的对象isShow属性为true,这个按钮就显示出来,如果为false,这个按钮就不显示出来,需要将一个普通的触发器和一个数据触发器组合起来,但这如何配置?








    • 已编辑 Trian555 2020年12月18日 3:01
    2020年12月18日 2:56

全部回复

  • 你好,

    Trigger 和 DataTrigger是不可以混合起来使用的,为了实现你的效果,我使用了属性Opacity作为中间值。以下是我为你提供的Sample:

        <Window.Resources>
            <XmlDataProvider x:Key="Employees" XPath="/Employees/*">
                <x:XData>
                    <Employees xmlns="">
                        <Employee Name="Terry Adams" isShow="false"  Type="FTE" EmployeeNumber="1" />
                        <Employee Name="Claire O&apos;Donnell" isShow="true" Type="FTE" EmployeeNumber="12345" />
                        <Employee Name="Palle Peterson" isShow="false" Type="FTE" EmployeeNumber="5678" />
                        <Employee Name="Amy E. Alberts"  isShow="false" Type="CSG" EmployeeNumber="99222" />
                        <Employee Name="Stefan Hesse" isShow="true" Type="Vendor" EmployeeNumber="-" />
                    </Employees>
                </x:XData>
            </XmlDataProvider>
    
            <DataTemplate  DataType="Employee">
                <WrapPanel>
                    <TextBlock Text="{Binding XPath=@Name}" />
                    <Button Name="btn" Content="{Binding XPath=@isShow}" Margin="10 0 0 0"  Visibility="Hidden" Opacity="0" />
                </WrapPanel>
              
                <DataTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Visibility" Value="Visible" TargetName="btn"></Setter>
                    </Trigger>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsMouseOver" Value="True"></Condition>
                            <Condition Property="Visibility" Value="Visible"></Condition>
                        </MultiTrigger.Conditions>
                        <Setter Property="Opacity" Value="1" TargetName="btn"></Setter>
                    </MultiTrigger>
    
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsMouseOver" Value="False"></Condition>
                        </MultiTrigger.Conditions>
                        <Setter Property="Opacity" Value="0" TargetName="btn"></Setter>
                    </MultiTrigger>
    
                    <DataTrigger Binding="{Binding XPath=@isShow}" Value="true">
                        <Setter Property="Visibility" Value="Visible" TargetName="btn"></Setter>
                    </DataTrigger>
                    
                    <DataTrigger Binding="{Binding XPath=@isShow}" Value="false">
                        <Setter Property="Visibility" Value="Hidden" TargetName="btn"></Setter>
                    </DataTrigger>
                    
                </DataTemplate.Triggers>
            </DataTemplate>
        </Window.Resources>
        <Grid>
            <ListBox Width="400" Margin="10" ItemsSource="{Binding Source={StaticResource Employees}}"></ListBox>
        </Grid>

    效果图如下:

    谢谢

    Daisy Tian


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2020年12月21日 3:22