我正在寻找一种方法来创建一个自定义形状的WPF控件,它可以包含子控件。
简化问题,我需要像非矩形面板这样的东西。
更新 我需要一个“真正的”自定义形状。不捕获形状之外的鼠标事件等。
答案 0 :(得分:1)
我将从ContentControl派生,然后作为其中的孩子,我会放置一个内容演示者,在内容演示者中,您可以放置任何面板,例如画布,您可以在其中托管其他元素。我会将此作为应用于您的控件的模板,并将演示者的内容绑定到控件的content属性,这样添加到控件的content属性会将其添加到将显示它的演示者。这是一个例子:
<ControlTemplate TargetType="MyCustomControl">
<Grid DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}">
<ContentPresenter Content="{TemplateBinding ContentControl.Content}"/>
<Ellipse x:Name="myEllipse Background="Green"/> <!-- the control won't catch events outside it-->
</Grid>
</ControlTemplate>
然后只需将模板应用到您的控件中即可完成设置,如果您想在其中托管其他元素,请不要忘记将面板添加为内容。