Pergunta

Alguém pode me dizer por que o seguinte não funciona, mas o depois disso? Observe o valor = sintaxe versus o uso explícito no último. Eu não entendo a diferença.

<Style.Triggers>
    <DataTrigger Binding="{Binding ItemType}" Value="{x:Type log:FranchiseAiring}">
        <Setter Property="Template" Value="{StaticResource FranchiseRowStyle}" />
    </DataTrigger>
</Style.Triggers>

Acima lança uma exceção, abaixo funciona bem:

<Style.Triggers>
<DataTrigger Binding="{Binding ItemType}">
    <DataTrigger.Value>
        <x:Type Type="{x:Type log:FranchiseAiring}" />
    </DataTrigger.Value>
    <Setter Property="Template" Value="{StaticResource FranchiseRowStyle}" />
</DataTrigger>

Exceção:Deve especificar a ligação e o valor para o datatrigger. Erro no objeto 'System.windows.datatrigger' no arquivo de markup '; componente/recursos de recursos/logstyles.xaml' Linha 14 Posição 15.

Stack Trace: em system.windows.markup.xamlparseexception.throwexception (mensagem de string, exceção innerexception, linenumber int32, int32 linePosition, Uri Baseuri,

Foi útil?

Solução

Provavelmente causou o bug anurag, mas você deve estar ciente de que os dois exemplos que você usou não são precisamente idênticos do ponto de vista XAML.

Se você converter isso em sintaxe de propriedade do elemento

Value="{x:Type whatever}"

O que você recebe é:

<DataTrigger.Value>
  <x:Type TypeName="whatever">
</DataTrigger.Value>

O que você escreveu em sua pergunta realmente corresponde a

Value="{x:Type Type={x:Type whatever}}"

Devido à semântica da Typeextension, ambos devem produzir o mesmo valor em todas as situações em que consigo pensar. Mas, para outros propósitos, eles podem ser diferentes e podem fazer cócegas de bugs diferentes no WPF.

Por causa disso, é possível que Value="{x:Type Type={x:Type log:FranchiseAiring}}" Pode funcionar para você. Você pode querer experimentar e descobrir.

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