Получить шаблон элемента управления ContentControl - PullRequest
4 голосов
/ 06 мая 2011

Мы работаем над приложением Silverlight, которое использует универсальный пользовательский ContentControl. Этот ContentControl имеет шаблон управления, указанный в Generic.xaml.

Шаблон унаследованного ContentControl ...

<Style TargetType="local:ExtContentControl">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:ExtContentControl">
                <Border x:Name="content" Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        Child="{TemplateBinding Content}">
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Шаблон наследуемого ComboBox ...

<controltemplate targettype="local:ExtComboBox"></controltemplate>

...

<Rectangle x:Name="FocusVisualElement" IsHitTestVisible="false" Margin="1" Opacity="0" RadiusY="2" RadiusX="2" Stroke="#FF6DBDD1" StrokeThickness="1"/>

Когда создается экземпляр содержимого ContentControl, устанавливается (общий) элемент управления, который может быть Textbox, Dropdown, Label или Datepicker.

public class ExtContentControl : ContentControl
{
    public ExtContentControl()
    {
        this.DefaultStyleKey = typeof(ExtContentControl);

        RenderControl();
    }

    private void RenderControl()
    {
        ExtComboBox extComboBox = new ExtComboBox();
        this.Content = extComboBox;
    }

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

        Border bor = GetTemplateChild("content") as Border;

        ExtComboBox cmbTest = bor.Child as ExtComboBox;

        //Find FocusVisualElement from ExtComboBox Control Template
        //Rectangle rec = cmbTest.FindName("FocusVisualElement") as Rectangle;
        //cmbTest returns null
    }
}

Как вы можете видеть в моем последнем комментарии ...

// Найти FocusVisualElement из шаблона управления ExtComboBox // Rectangle rec = cmbTest.FindName ("FocusVisualElement") as Rectangle; // cmbTest возвращает ноль

Как я могу получить FocusVisualElement из OnApplyTemplate внутри ContentControl?

Надеюсь, это имеет смысл.

1 Ответ

1 голос
/ 10 мая 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...