我正在尝试根据装饰元素的父级尺寸来定位装配工.例如,我有一个文本框.我想装饰这个文本框,所以它看起来像这样:
如何安置装饰者http://img707.imageshack.us/img707/9840/fig1.png
文本框放置在画布对象中,如果有足够的可用空间,则将装饰器(半透明的圆角正方形)与文本框的下边缘对齐.当用户点击文本框时,会启动装饰器.
目前,画布及其内容(文本框)以WinForms格式托管 - 因此WPF由ElementHost控件处理.
但是当我运行我的代码时,第一次单击文本框时,它会显示与文本框顶边对齐的装饰器(参见下图).之后它正确定位(如上图所示)有谁知道为什么会这样?
如何装饰是位置http://img14.imageshack.us/img14/4766/fig2v.png
我已粘贴下面的代码:
TextBoxAdorner.cs - 这是装配逻辑
public class TextBoxAdorner : Adorner
{
private TextBox _adornedElement;
private VisualCollection _visualChildren;
private Rectangle _shape;
private Canvas _container;
private Canvas _parentCanvas;
public TextBoxAdorner(UIElement adornedElement, Canvas parentCanvas)
: base(adornedElement)
{
_adornedElement = (TextBox)adornedElement;
_parentCanvas = parentCanvas;
_visualChildren = new VisualCollection(this);
_container = new Canvas();
_shape = new Rectangle();
_shape.Width = 100;
_shape.Height = 80;
_shape.Fill = Brushes.Blue;
_shape.Opacity = 0.5;
_container.Children.Add(_shape);
_visualChildren.Add(_container);
}
protected override Size ArrangeOverride(Size finalSize)
{ …Run Code Online (Sandbox Code Playgroud) 我有一组需要在彼此之上绘制的形状。我需要对它们重新排序,以便最后绘制最小的形状(即它将最接近用户)。有什么方法可以检查一个形状是否与另一个形状重叠(包围和/或相交)。Rect我知道结构中有一个称为的方法Contains,它检查其中是否有对象。是否有类似的方法或方法可以在 WPF 中的 Shapes 上模拟它?预先感谢您的任何帮助。
干杯,
尼禄
我想知道在WPF中你是否能够获得datatemplate对象的实际实例.例如,在以下情况中:
<UserControl>
<UserControl.Resources>
<DataTemplate x:Key="MyTemplate">
<CustomControl ></CustomControl>
</DataTemplate>
</UserControl.Resources>
<ListBox DataTemplate="{StaticResource MyTemplate}"></ListBox>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
假设CustomControl有一个CustomEvent和一个公众CustomMethod.我想在用户控件中访问该事件和公共方法.这可能吗?我怎么能这样做?在此先感谢您的帮助.
干杯,
尼鲁