【发布时间】:2011-11-18 01:11:16
【问题描述】:
给定一个自定义用户控件,其中包含一个画布。
<Grid>
<Border BorderBrush="Black" BorderThickness="3">
<Canvas x:Name="CanvasDropArea" Background="#FFF7BDBD"/>
</Border>
</Grid>
有没有办法公开画布以允许将其他控件附加到上述用户控件中?
<CustomControlWithCanvas>
<Canvas>
<!--other user control-->
<Canvas>
</CustomControlWithCanvas>
我尝试将其作为属性公开,但失败了,因为它被视为普通属性,而不是允许附加 UIElements 的 Collection。但是,我可以通过检索画布并手动添加它,使用后面的代码将控件附加到元素上。
那么暴露画布的正确方法应该是什么?允许它在设计时改变,并保留画布 TOP 和左依赖属性。
【问题讨论】:
-
我想知道你为什么不能只使用普通的画布?您需要将它放在用户控件中的原因是什么?
-
我想要实现的是有一个边框和一些连接到画布的自定义行为,所以我不会重复这个(总共 8 个画布),我只是将它作为一个通用的用户控件.所以将来如果我要附加其他行为,我只需要编辑我的主要用户控件。还是有更好的方法来实现这一点?
-
这些行为是否与
Border或Canvas相关联? -
我的用户控件包含的是(边框、画布和 2 个按钮 [左右]),它们的行为是鼠标事件列表,它的工作方式类似于媒体播放器,具有将鼠标悬停[拖动对象]到画布会使边框更改(变为虚线),如果有鼠标进入,则会出现2个按钮,并隐藏鼠标悬停。这将导致一组这些控件在网格内布局,允许用户将对象从这些“CustomCanvas”控件中的一个拖动到另一个。我想把它包起来。
-
我认为实现这一点的一种方法是使用一种行为,您可以在后面的代码中手动将您的对象添加到画布中,对吧?只需使用一个行为来封装这段代码并将行为附加到您的用户控件。
标签: c# silverlight silverlight-4.0 canvas