Pergunta

É possível usar um MultiTrigger para avaliar as propriedades em vários elementos? Que não residem dentro de um modelo, mas estão dentro do Usercontrol / janela.

Exemplo:

<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>

Em um Trigger normal, podemos usar o sourceName para disparar contra propriedades em qualquer um desses controles de caixa de seleção, mas com um MultiTrigger eu recebo erros de compilação quando se tenta encontrar esses controles.

Nota: A razão que eu estou usando um DataTemplate em oposição a um Style é mencionado aqui

Foi útil?

Solução

Você pode realmente usar o nome de origem, mas que o seu DataTemplate não parece estar definida corretamente. Eu tentei preencher o seu exemplo que parece funcionar:

<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>

O problema parece ser que você não definir seus CheckBoxes dentro o seu DataTemplate, que é onde eles precisam ser.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top