WPF用户控件扩展边界类&引用;不支持直接内容";?

WPF用户控件扩展边界类&引用;不支持直接内容";?,wpf,xaml,wpf-controls,Wpf,Xaml,Wpf Controls,我正在为一个过程控制系统制作图形,我想创建一个系统边框,它可以直观地包装过程模拟中显示的各个子系统。我可以使用一个常规的边框,除了我希望它不仅可以改变颜色反映系统状态,还可以弹出小的“气球”,指示处于报警状态的系统部件 我创建了一个带有用户控件的测试项目,并添加了一个列表框(用于引出序号)和一个封装在边框控件中的ContentPresenter元素。但是,每当我在其他应用程序中使用此新控件时,它都不允许我向其添加内容。我尝试过将一些内容与ContentPropertyAttribute和Con

我正在为一个过程控制系统制作图形,我想创建一个系统边框,它可以直观地包装过程模拟中显示的各个子系统。我可以使用一个常规的边框,除了我希望它不仅可以改变颜色反映系统状态,还可以弹出小的“气球”,指示处于报警状态的系统部件

我创建了一个带有用户控件的测试项目,并添加了一个列表框(用于引出序号)和一个封装在边框控件中的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>

塔加
塔格
我不明白。除了contentpresenter的存在,它还需要什么?UserControl是ContentControl的子类,所以我认为连接已经就绪。最终,我希望它能被这样使用:

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

要创建自己的容器控件,必须创建新的自定义控件(而不是UserControl)

使新控件从ContentControl继承

自定义控件没有自己的XAML。相反,它们被分配了一个ControlTemplate

创建第一个自定义控件时,IDE将创建一个新文件Themes\Generic.xaml

这就是控件的模板所在的位置。您可以修改此模板以匹配问题中的XAML。这将支持ContentPresenter元素


我发现了一个非常好的演练。

非常感谢!迫不及待地想看看。