Как обернуть свойство DependencyProperty элемента, содержащегося в элементе управления пользователя? - PullRequest
2 голосов
/ 26 июля 2011

С UserControl, содержащим путь, подобный этому:

<UserControl x:Class="MyApp.MyUserControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Path x:Name="path1" >
        <Path.Data>
            <GeometryGroup>
                <EllipseGeometry x:Name="ellipse1" ... />
                <EllipseGeometry x:Name="ellipse2" ... />
            </GeometryGroup>
        </Path.Data>
    </Path>
</UserControl>

Как я могу представить свойства Path, такие как Fill или Stroke, как свойства usercontrol, чтобы я мог объявить привязки к ним.

<MineAllMine:MyUserControl ... DataContext="{Binding MyMasterPlan}" Fill="{Binding Colour}" />

Я попытался обернуть свойства, объявив новые DependencyProperties что-то вроде:

public class MyUserControl:UserControl{
    ...
    public static readonly DependencyProperty FillProperty =
        DependencyProperty.Register("Fill", typeof(Brush), typeof(MyUserControl),
        new PropertyMetadata(Path.FillProperty.DefaultMetadata.DefaultValue));

    public Brush Fill
    {
        get { return path1.Fill; }
        set { path1.Fill = value; }
    }
    ...
}

Увы, безрезультатно.

1 Ответ

2 голосов
/ 26 июля 2011

Вам следует привязать Path.Fill к DP, уже находящемуся в UserControl, например Background или Foreground, или определить новый, который можно привязать, например PathFill.Конечный результат аналогичен использованию TemplateBinding в ControlTemplate, за исключением того, что вы используете привязку RelativeSource к родительскому UserControl.

public class MyUserControl : UserControl
{
    public static readonly DependencyProperty PathFillProperty =
        DependencyProperty.Register(...);

    public Brush PathFill
    {
        get { return GetValue(...); }
        set { SetValue(...); }
    }
}

XAML:

<Path Fill="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=PathFill">
...
</Path>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...