Мой WPF может Разработать использование Метода set TemplateBinding?

//I am not sure why this works but it fixes the problem.

Этот стоит первым в списке для моих бесполезных комментариев.

20
задан Dave Clemmer 9 August 2011 в 16:28
поделиться

2 ответа

Это должно работать в случае, когда вы создаете шаблон элемента управления и хотите связать значение свойства этого элемента управления со свойством другого элемента управления внутри шаблона. В вашем случае вы создаете шаблон (назовем его MyControl), и этот шаблон будет включать border, Padding которого должен быть связан с padding MyControl.

Из документации MSDN:

TemplateBinding - это оптимизированная форма Binding для шаблонных сценариев, аналогичная Binding, построенной с помощью {Binding RelativeSource={RelativeSource TemplatedParent}}.

По какой-то причине указание TemplatedParent в качестве источника для привязки не работает в установщиках стилей. Чтобы обойти это, вы можете указать относительного родителя как AncestorType элемента управления, который вы шаблонируете (что эффективно находит TemplatedParent, если вы не внедрили другие MyControls в шаблон MyControl).

Я использовал это решение, когда пытался создать шаблон элемента управления Button, в котором содержимое (String) Button должно было быть связано со свойством Text блока TextBlock в шаблоне ControlTemplate для кнопки. Вот как выглядел этот код:

<StackPanel>
    <StackPanel.Resources>
        <ControlTemplate x:Key="BarButton" TargetType="{x:Type Button}">
            <ControlTemplate.Resources>
                <Style TargetType="TextBlock" x:Key="ButtonLabel">
                    <Setter Property="Text" Value="{Binding Path=Content, RelativeSource={RelativeSource AncestorType={x:Type Button}} }" />
                </Style>
            </ControlTemplate.Resources>
            <Grid>
                <!-- Other controls here -->
                <TextBlock Name="LabelText" Style="{StaticResource ButtonLabel}" />
            </Grid>
        </ControlTemplate>
    </StackPanel.Resources>
    <Button Width="100" Content="Label Text Here" Template="{StaticResource BarButton}" />
</StackPanel>
36
ответ дан 29 November 2019 в 23:57
поделиться

Свойство можно квалифицировать, просто поставив перед ним префикс с именем типа. Например, Border.Padding вместо Padding .

Однако я не уверен, что это имеет смысл для вашего сценария. TemplateBinding используются внутри шаблона управления.

3
ответ дан 29 November 2019 в 23:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: