2017-10-01 3 views
0

J'utilise XamlReader::Load pour analyser DataTemplate. Est-il possible de transmettre des ressources statiques telles que le convertisseur de valeur? Aussi, est-il un moyen de modifier le DataTemplate résultant après le chargement; par exemple, attacher un gestionnaire d'événements?Passer la ressource à XamlReader

Répondre

0

Est-il possible de transmettre des ressources statiques comme un convertisseur de valeur?

Oui. Vous pourriez le faire. Vous avez juste besoin de noter que Any custom assemblies referenced in a XAML namespace mapping must already be available to the application.

J'ai fait un exemple de code pour votre référence, mon code est le code C#, mais la chaîne datatemplate est la même.

namespace AppXamlLoad 
{ 
    public class MyConverter:IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, string language) 
     { 
      return "test"; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, string language) 
     { 
      throw new NotImplementedException(); 
     } 
    } 
} 
StringBuilder sbTemp = new StringBuilder(); 
sbTemp.Append("<DataTemplate "); 
sbTemp.Append("xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' ");   
sbTemp.Append("xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' "); 
sbTemp.Append("xmlns:local='using:AppXamlLoad'>"); 
sbTemp.Append("<Grid>"); 
sbTemp.Append("<Grid.Resources>"); 
sbTemp.Append("<local:MyConverter x:Key='myconverter'></local:MyConverter>"); 
sbTemp.Append("</Grid.Resources>"); 
sbTemp.Append("<TextBox Margin='2'"); 
sbTemp.Append(" Text='{Binding"); 
sbTemp.Append(" Converter={StaticResource myconverter}}'/>"); 
sbTemp.Append("</Grid>"); 
sbTemp.Append("</DataTemplate>"); 
DataTemplate dt = XamlReader.Load(sbTemp.ToString()) as DataTemplate; 
mylsiview.ItemTemplate = dt; //mylistview is my listview control in xaml page 

est-il possible de modifier le DataTemplate résultant après le chargement; par exemple, attacher un gestionnaire d'événements?

Oui.

La logique de création d'objet ne peut pas intégrer le code XAML chargé avec des classes de code à l'exécution. Si vous souhaitez ajouter des gestionnaires d'événements, vous devez le faire dans le code en référençant les objets obtenus à partir de l'arborescence des objets du résultat de la charge et en utilisant la syntaxe spécifique à la langue pour attacher les gestionnaires. De MSDN

Jerry Nixon a répondu un fil similaire, s'il vous plaît se référer à elle pour plus de détails: Handle an event in a Data Template loaded by XamlReader.Load(xaml) in code-behind