Как получить доступ и предоставить значения по умолчанию для элементов управления в шаблонах WPF? - PullRequest
0 голосов
/ 19 мая 2011

Я борюсь с шаблонами управления. В настоящее время я создаю пользовательский интерфейс, который имеет несколько панелей, которые по сути основаны на более элементарных элементах управления.

вот как сейчас выглядит одна из наших строительных панелей:

<Grid>

    <StackPanel>

        <ContentControl  Template="{StaticResource ConstructionBorderCtrl}">
            <ContentControl Template="{StaticResource StringCtrl}" Content="Cash Event Value:"/>
        </ContentControl>

        <ContentControl  Template="{StaticResource ConstructionBorderCtrl}">
            <ContentControl  Template="{StaticResource RateCtrl}"></ContentControl>
        </ContentControl>

        <ContentControl Template="{StaticResource ConstructionBorderCtrl}">
            <ContentControl Grid.Row="0" Template="{StaticResource FromCtrl}"></ContentControl>
        </ContentControl>

        <ContentControl Template="{StaticResource ConstructionBorderCtrl}">
            <ContentControl Grid.Row="0" Template="{StaticResource StartEndDateCtrl}"></ContentControl>
        </ContentControl>

        <ContentControl Template="{StaticResource ConstructionBorderCtrl}">
            <ContentControl Grid.Row="0" Template="{StaticResource ComboStringCtrl}">Applicable Size:</ContentControl>
        </ContentControl>

    </StackPanel>

</Grid>

Вот пример шаблона для StringCtrl:

<ControlTemplate x:Key="StringCtrl" TargetType="ContentControl">

    <Grid Margin="5">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <TextBlock Name="ctrlText" Margin="0,0,5,0" Text="{TemplateBinding Content}"></TextBlock>
        <TextBox Name="ctrlDefaultValue" Grid.Column="1" />
    </Grid>
</ControlTemplate>

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

1 Ответ

1 голос
/ 19 мая 2011

Это, безусловно, дизайн, который я никогда раньше не видел.Я думаю, что UserControls или какой-либо другой тип пользовательского элемента управления будут работать лучше, чем подход ControlTemplate.

Но если вы определенно хотите пойти по этому пути, я мог бы увидеть поведение, работающее на вас, если естьнекоторая согласованность с вашей структурой / именами в шаблонах - вы можете установить свойства для поведения, и поведение может получить доступ к элементу управления через его свойство AssociatedObject, чтобы иметь возможность устанавливать значения дочерних элементов и выполнять проверку.

КажетсяМне нравится много работы.

...