2 votes

Contrôle utilisateur WPF étendant la classe de la bordure. "Ne prend pas en charge le contenu direct" ?

Je produis des graphiques pour un système de contrôle de processus et je voudrais créer une bordure de système qui envelopperait visuellement les différents sous-systèmes affichés dans la mimique de processus. Je pourrais utiliser une bordure ordinaire pour cela, mais je veux qu'elle change de couleur pour refléter l'état du système et qu'elle fasse apparaître de petits "ballons" indiquant la partie du système qui est en état d'alarme.

Process Mimic

J'ai créé un projet de test avec un contrôle d'utilisateur et ajouté une ListBox (pour les ballons) et un élément ContentPresenter enveloppé dans un contrôle de bordure. Cependant, lorsque j'utilise ce nouveau contrôle dans une autre application, il ne me permet pas d'y ajouter du contenu. J'ai essayé de jouer avec l'attribut ContentPropertyAttribute et les propriétés de l'élément ContentPresenter, mais j'ai l'impression d'être dans une impasse.

<UserControl x:Class="SystemStatusBorder.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Canvas Height="290" Width="303">        
        <Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
            <ContentPresenter/>
        </Border>
        <ListBox Canvas.Right="0" Canvas.Bottom="0">
            <ListBox.RenderTransform>
                <TranslateTransform X="20"></TranslateTransform>
            </ListBox.RenderTransform>
            <ListBoxItem>TagA</ListBoxItem>
            <ListBoxItem>TagB</ListBoxItem>
        </ListBox>
    </Canvas>
</UserControl>

Je ne comprends pas. Que faut-il de plus que l'existence d'un présentateur de contenu ? UserControl sous-classe ContentControl, j'aurais donc pensé que le câblage était en place. En fin de compte, je veux qu'il soit utilisé comme ceci :

<SystemBorder>
  <SystemBorder.MonitoredTags>
        <List of relevant tags for the specific sub system goes here>
  </SystemBorder.MonitoredTags>
  <regular content goes here>  
</SystemBorder>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X