具有MultiTriggers的SourceName

时间:2009-06-17 16:48:47

标签: wpf xaml triggers multitrigger

是否可以使用MultiTrigger来评估多个元素的属性?它不在模板中,但在Usercontrol / Window中。

示例:

<CheckBox x:Name="checkBox1" />
<CheckBox x:Name="checkBox2" />

<CustomControl>
   <CustomControl.ContentTemplate>
              <DataTemplate>
                        <DataTemplate.Triggers>
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition
                                        SourceName="checkBox1"
                                        Property="IsChecked"
                                        Value="False" />
                                    <Condition
                                        SourceName="checkBox2"
                                        Property="IsChecked"
                                        Value="True" />
                                </MultiTrigger.Conditions>
                                <MultiTrigger.Setters>
                                    <Setter
                                        Property="Visibility"
                                        Value="Collapsed" />
                                </MultiTrigger.Setters>
                            </MultiTrigger>
                        </DataTemplate.Triggers>
                    </DataTemplate>
</CustomControl.ContentTemplate>

在正常的Trigger中,我们可以使用sourceName来触发这些复选框控件中的任何一个上的属性,但是当MultiTrigger尝试查找这些控件时,我会遇到构建错误。

注意:提到我使用DataTemplate而不是Style的原因here

1 个答案:

答案 0 :(得分:2)

您确实可以使用源名称,但您的DataTemplate似乎未正确定义。我已经尝试填写你的例子似乎有效:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <Grid>
        <Grid.Resources>
            <DataTemplate DataType="{x:Type sys:String}">
                <StackPanel>
                    <TextBlock x:Name="textBlock" Text="{Binding}"></TextBlock>
                    <CheckBox x:Name="checkBox1" />
                    <CheckBox x:Name="checkBox2" />
                </StackPanel>
                <DataTemplate.Triggers>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition
                                SourceName="checkBox1"
                                Property="IsChecked"
                                Value="False" />
                            <Condition
                                SourceName="checkBox2"
                                Property="IsChecked"
                                Value="True" />
                        </MultiTrigger.Conditions>
                        <MultiTrigger.Setters>
                            <Setter
                            TargetName="textBlock"
                                Property="Visibility"
                                Value="Collapsed" />
                        </MultiTrigger.Setters>
                    </MultiTrigger>
                </DataTemplate.Triggers>

            </DataTemplate>
        </Grid.Resources>
        <ContentControl>
            <sys:String>Foo</sys:String>
        </ContentControl>
    </Grid>
</Page>

问题似乎是您没有在DataTemplate中定义CheckBox ,这是他们需要的地方。