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