WPF-кнопки ContentTemplate переопределяются при установке через стиль - PullRequest
0 голосов
/ 05 июня 2018

Если я устанавливаю ContentTemplate непосредственно в Content Presenter, он работает нормально, если я использую Style, он переопределяется:

Внутри кнопок ControlTemplate:

<ContentPresenter ContentTemplate="{StaticResource Default}"/>

против

<ContentPresenter Style="{StaticResource MyContentStyle}"/>

Работает нормально:

<DataTemplate x:Key="Default">
    <StackPanel>
        <TextBlock>this is the</TextBlock>
        <TextBlock>default view</TextBlock>
        <TextBlock Text="{Binding}"></TextBlock>
    </StackPanel>
</DataTemplate>

<ControlTemplate x:Key="ButtonTemplate" TargetType="Button">
    <Grid Margin="20">
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"
                                      ContentTemplate="{StaticResource Default}"
                                      />
        </Border>
    </Grid>
</ControlTemplate>
</Grid.Resources>
<Button Template="{StaticResource ButtonTemplate}">Click Me</Button>

По умолчанию DataTemplate не применяется, говорится, переопределено в визуальном дереве.это вид по умолчанию

<Style x:Key="MyContentStyle" TargetType="ContentPresenter">
    <Setter Property="ContentTemplate" Value="{StaticResource Default}"/>
</Style>

<ControlTemplate x:Key="ButtonTemplate" TargetType="Button">
    <Grid Margin="20">
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" 
                                      Style="{StaticResource MyContentStyle}"
                                      />
        </Border>
    </Grid>
</ControlTemplate>
</Grid.Resources>
<Button Template="{StaticResource ButtonTemplate}">Click Me</Button>

Если я использую ContentPresenter независимо от кнопки, он работает нормально:

<Grid>
    <ContentPresenter Style="{StaticResource MyContentStyle}" Content="Work fine even with Style" />
</Grid>

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Если в ContentPresenter установлено содержимое, стиль будет применен.Таким образом, решение для стиля работы:

<ContentPresenter Content="{Binding Content, RelativeSource={RelativeSource TemplatedParent}}"  Style="{StaticResource MyContentStyle}" />
0 голосов
/ 05 июня 2018

Button имеет собственное свойство ContentTemplate.Установите этот параметр напрямую:

<Button Template="{StaticResource ButtonTemplate}" ContentTemplate="{StaticResource Default}">Click Me</Button>

Или в Style, который вы применяете к Button:

<Style x:Key="ButtonStyle" TargetType="Button" >
    <Setter Property="ContentTemplate" Value="{StaticResource Default}"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Grid Margin="20">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"  />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
...
<Button Style="{StaticResource ButtonStyle}">Click Me</Button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...