As propriedades personalizadas em XAML de System.Windows.Window
-
03-07-2019 - |
Pergunta
Eu tenho um muito simples WPF UserControl que se parece com isso:
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;
}
}
}
No entanto, quando tento fazer isso no XAML da janela na qual o UserControl está sentado:
<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>
Eu recebo os seguintes erros:
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'.
Deve haver maneira simples de obter o acima para o trabalho, mas eu tenho medo que eu não tenho sido capaz de encontrar qualquer informação relevante sobre o assunto. Alguém pode por favor me dê um ponteiro ou dois?
Muito obrigado!
Solução
O Type.Property
sintaxe é usado para definir propriedades anexadas . Tente isto em vez disso:
<test:UserControl1 Name="whatever">
<test:UserControl1.Composite>
<test:Composite Color="Blue"/>
</test:UserControl1.Composite>
</test:UserControl1>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow