У меня есть очень простой 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>
Однако вы не использовали синтаксис элемента свойства. Это означало бы наличие дочернего элемента Composite.Color внутри элемента UserControl1 (а не атрибута).
Спасибо, Кент, похоже, все работает нормально. Из этого URL-адреса msdn.microsoft.com/en-us/library/ms752059.aspx#properties я понял, что синтаксис атрибута и синтаксис элемента свойства взаимозаменяемы. У вас есть лучшая ссылка для объяснения различий?