سؤال

ولقد حصلت على WPF UserControl بسيط جدا التي تبدو مثل هذا:

namespace WpfControlLibrary1
{
  public partial class UserControl1 : UserControl
  {
    public UserControl1()
    {
      InitializeComponent();
      Composite = new Composite();
      Composite.Color = Colors.Red;
    }

    protected override void OnRender(DrawingContext drawingContext)
    {
      Draw(drawingContext, new Rect(RenderSize));
    }

    public void Draw(DrawingContext g, Rect rect)
    {
      Composite.Draw(g, rect);
    }

    public Composite Composite
    {
      get;
      set;
    }
  }

  public class Composite
  {
    public void Draw(DrawingContext g, Rect rect)
    {
      g.DrawRectangle(new SolidColorBrush(Color), new Pen(Brushes.Black, 1.0), rect);
    }

    public Color Color
    {
      get;
      set;
    }
  }
}

ولكن عندما أحاول القيام بذلك في XAML من النافذة التي في UserControl يجلس:

<Window x:Class="WpfApplication1.Window2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:test="clr-namespace:WpfControlLibrary1;assembly=WpfControlLibrary1"
    Title="Window2" Height="500" Width="700">

  <test:UserControl1 Name="uControl1" Composite.Color="Blue">
  </test:UserControl1>
</Window>

وأحصل على الأخطاء التالية:

Error   1   The attachable property 'Color' was not found in type 'Composite'.
Error   2   The property 'Composite.Color' does not exist in XML namespace 'http://schemas.microsoft.com/winfx/2006/xaml/presentation'.

ويجب أن يكون هناك طريقة بسيطة للحصول على أعلى للعمل، ولكن أخشى لم أكن قادرة على العثور على أي معلومات ذات صلة عن هذا الموضوع. أي شخص يمكن أن يرجى تعطيني مؤشر أو اثنين؟

وشكرا جزيلا!

هل كانت مفيدة؟

المحلول

ويستخدم Type.Property جملة لتحديد المرفقة خصائص . جرب هذا بدلا من ذلك:

<test:UserControl1 Name="whatever">
    <test:UserControl1.Composite>
        <test:Composite Color="Blue"/>
    </test:UserControl1.Composite>
</test:UserControl1>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top