Ich erstelle Grafiken für ein Prozesssteuerungssystem und möchte eine Systemumrandung erstellen, die die verschiedenen Teilsysteme, die in der Prozessdarstellung angezeigt werden, visuell einhüllt. Ich könnte dafür einen normalen Rahmen verwenden, aber ich möchte, dass er nicht nur die Farbe des Systemstatus ändert, sondern auch kleine "Sprechblasen" aufpoppen lässt, die den Teil des Systems anzeigen, der sich im Alarmzustand befindet.
Ich habe ein Testprojekt mit einem Benutzersteuerelement erstellt und eine ListBox (für die Sprechblasen) und ein ContentPresenter-Element, das in ein Border-Steuerelement eingeschlossen ist, hinzugefügt. Allerdings, wann immer ich dieses neue Steuerelement in einer anderen Anwendung verwenden, es nicht zulassen, dass ich Inhalte hinzufügen. Ich habe versucht, einige mit dem ContentPropertyAttribute und Eigenschaften des ContentPresenter-Elements zu verwirren, aber ich fühle mich hier im Blindflug.
<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>
Das verstehe ich nicht. Was sollte es noch brauchen, außer der Existenz eines Contentpresenters? UserControl ist eine Unterklasse von ContentControl, also hätte ich gedacht, dass die Verkabelung vorhanden ist. Schließlich möchte ich es etwas wie dieses verwendet werden:
<SystemBorder>
<SystemBorder.MonitoredTags>
<List of relevant tags for the specific sub system goes here>
</SystemBorder.MonitoredTags>
<regular content goes here>
</SystemBorder>