Élément de ressources ou userControl?
-
20-09-2019 - |
Question
J'ai du XAML pour dessiner un logo et je veux réutiliser cela dans divers autres fichiers XAML (il n'a pas d'interface utilisateur et ne nécessite aucun code). Le niveau supérieur du logo xaml est un Canvas
Objet.
Pour utiliser le logo dans d'autres fichiers XAML, il est préférable de définir ce logo comme un élément dans un ResourceDictionary
ou créer un UserControl
?
Cela semble facile avec un UserControl
, Cependant, je veux charger mes fichiers xaml avec xamlreader afin que je préfère utiliser des ressources afin que celles-ci puissent être spécifiées dans le XAML. Il semble possible de stocker des articles tels que Canvas
dans un ResourceDictionary
Mais je ne sais pas comment les faire référence.
Par exemple, je peux définir mon logo comme un ResourceDictionary
élément comme suit:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Canvas x:Name="LayoutRoot" x:Key="Logo">
<!-- My Logo -->
</Canvas>
</ResourceDictionary>
Mais comment puis-je utiliser ça Logo
Dans mes autres fichiers XAML - peut-être que j'ai la mauvaise idée des ressources?
La solution
J'ai trouvé que la solution est un brush visuel. Je peux définir cela dans le ressourcementaire comme suit:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<VisualBrush x:Key="Logo">
<VisualBrush.Visual>
<Canvas x:Name="LayoutRoot" x:Key="Logo">
<!-- My Logo -->
</Canvas>
Ensuite, utilisez simplement ce Brush si nécessaire.
Autres conseils
En règle générale, si vous voulez faire un dictionnaire de ressources pour cela, vous fabriqueriez un style. Vous pouvez ensuite supprimer un contrôle et le coiffer avec votre ressource, dans tout autre fichier XAML que vous avez souhaité.
Cependant, une comténutrol serait potentiellement une option plus facile, car ce serait un élément simple et réutilisable que vous pourriez déposer n'importe où.