Domanda

Ho un DataTemplate in app.xaml che si lega in vista di un ViewModel.

<Application.Resources>
    <DataTemplate DataType="{x:Type vm:someviewmodeltype}">
        <vw:somevwcontrol />
    </DataTemplate>
</Application.Resources>

il modello di cui sopra non vengono applicati se non ci sono stili. Nel momento in cui ho messo uno stile, qualcosa di simile ...

<Application.Resources>
    <DataTemplate DataType="{x:Type vm:someviewmodeltype}">
        <vw:somevwcontrol />
    </DataTemplate>
    <Style TargetType="TextBlock">
        <Setter Property="FontSize" Value="20"></Setter>
    </Style>
</Application.Resources>

DataTemplate viene raccolto e produce i risultati desiderati ... non sono sicuro che cosa sta accadendo lì ... qualcuno potrebbe chiarire questo?

Grazie.

È stato utile?

Soluzione

risposto a una domanda simile qui . La questione non è esattamente la stessa, che una conteneva dizionari unite essere ignorati, ma è molto probabile che lo stesso bug.

Si tratta di un bug di ottimizzazione, vedere questo link .

Sulla creazione di ogni oggetto in XAML, se uno stile di default è presente (Vale a dire lo stile w / una chiave di tipo), che lo stile deve essere applicato. Come puoi immaginare ci sono diverse prestazioni ottimizzazioni per fare che (implicito) occhiata un peso leggero possibile. Uno di loro è che noi non guardiamo dentro Risorse Dizionari a meno che non siano contrassegnato come “contenente predefinita Stili”. C'è un bug: se tutta la vostra stili predefiniti sono annidati in fusione dizionari tre livelli di profondità (o più profonda) il dizionario superiore non lo fa ottenere contrassegnato così la ricerca salta esso. Il giro di lavoro è quello di mettere un default Stile per qualcosa, qualsiasi cosa, nel Dizionario di root.

Vedo che hai già trovato la soluzione pure, basta aggiungere uno stile manichino default in App.xaml. Essa non deve avere alcun setter ecc, qualcosa di simile a questo farà così

<Application.Resources>
    <DataTemplate DataType="{x:Type vm:someviewmodeltype}">
        <vw:somevwcontrol />
    </DataTemplate>
    <Style TargetType="{x:Type Rectangle}" /> 
</Application.Resources>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top