Могу ли я использовать XAML для установки вложенного свойства (свойства значения свойства) элемента управления?

StackOverflow https://stackoverflow.com/questions/834391

Вопрос

У меня есть элемент управления WPF, который предоставляет доступ к одному из своих дочерних элементов (из его ControlTemplate) через свойство, доступное только для чтения.На данный момент это просто свойство CLR, но я не думаю, что это имеет какое-то значение.

Я хочу иметь возможность установить одно из свойств дочернего элемента управления из XAML, где я создаю экземпляр основного элемента управления.(На самом деле, я хотел бы привязаться к нему, но я думаю, что его настройка была бы хорошим первым шагом.)

Вот некоторый код:

public class ChartControl : Control
{
    public IAxis XAxis { get; private set; }

    public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();

        this.XAxis = GetTemplateChild("PART_XAxis") as IAxis;
    }
}

public interface IAxis
{
    // This is the property I want to set
    double Maximum { get; set; }
}

public class Axis : FrameworkElement, IAxis
{
    public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register("Maximum", typeof(double), typeof(Axis), new FrameworkPropertyMetadata(20.0, FrameworkPropertyMetadataOptions.AffectsRender, OnAxisPropertyChanged));

    public double Maximum
    {
        get { return (double)GetValue(MaximumProperty); }
        set { SetValue(MaximumProperty, value); }
    }
}

Вот два способа, которыми я могу придумать установку вложенного свойства в XAML (ни один из них не компилируется):

<!-- 
    This doesn't work:
    "The property 'XAxis.Maximum' does not exist in XML namespace 'http://schemas.microsoft.com/winfx/2006/xaml/presentation'."
    "The attachable property 'Maximum' was not found in type 'XAxis'."
-->
<local:ChartControl XAxis.Maximum="{Binding Maximum}"/>

<!-- 
    This doesn't work: 
    "Cannot set properties on property elements."
-->
<local:ChartControl>
    <local:ChartControl.XAxis Maximum="{Binding Maximum}"/>
</local:ChartControl>

Возможно ли это вообще?

Без этого, я думаю, мне просто нужно будет выставить DP в главном элементе управления, которые будут привязаны к дочерним элементам (в шаблоне).Не так уж плохо, я думаю, но я просто пытался избежать взрыва свойств в главном элементе управления.

Ваше здоровье.

Это было полезно?

Решение

Ты не можешь сделать это вот так...вы можете получить доступ к вложенным свойствам через их путь в привязке, но не тогда, когда вы определяете значение свойства.

Ты должен сделать что-то подобное :

<local:ChartControl>
    <local:ChartControl.XAxis>
        <local:Axis Maximum="{Binding Maximum}"/>
    </local:ChartControl.XAxis>
</local:ChartControl>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top