Я создаю графику для системы управления процессом, и я хотел бы создать системную границу, которая визуально обернула бы различные подсистемы, отображаемые в имитаторе процесса. Я мог бы использовать для этого обычную рамку, за исключением того, что я хочу, чтобы она не только меняла цвет, отражающий состояние системы, но и высовывала маленькие «шарики», указывающие на часть системы, которая находится в состоянии тревоги.
Я создал тестовый проект с пользовательским элементом управления и добавил ListBox (для всплывающих подсказок) и элемент ContentPresenter, обернутый в пограничный элемент управления. Однако всякий раз, когда я использую этот новый элемент управления в другом приложении, он не позволяет мне добавлять к нему контент. Я пытался связать некоторые с ContentPropertyAttribute и свойствами элемента ContentPresenter, но я чувствую, что здесь я в тупике.
<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>
Я не понимаю. Что еще нужно для этого, кроме наличия контент-презентера? UserControl подклассы ContentControl, поэтому я бы подумал, что проводка на месте. В конце концов, я хочу использовать что-то вроде этого:
<SystemBorder>
<SystemBorder.MonitoredTags>
<List of relevant tags for the specific sub system goes here>
</SystemBorder.MonitoredTags>
<regular content goes here>
</SystemBorder>