Как установить стиль для ItemsPanel снаружи? - PullRequest
1 голос
/ 15 октября 2019

Я определяю стиль, чтобы сделать все StackPanel зеленым:

<Window.Resources>
    <Style TargetType="StackPanel">
        <Setter Property="Background" Value="Green" />
    </Style>
</Window.Resources>

Но если я использую StackPanel в качестве шаблона панели, тогда он НЕ зеленый:

<UniformGrid>
    <StackPanel /><!-- this one is green -->
    <ItemsControl>
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel /><!-- this one is not -->
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>
</UniformGrid>

Почему? Как сделать так, чтобы оно было зеленым?

1 Ответ

1 голос
/ 15 октября 2019

Либо переместите неявный Style в App.xaml, либо добавьте ресурс, основанный на неявном Style, в ItemsPanelTemplate:

<ItemsControl>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <ItemsPanelTemplate.Resources>
                <Style TargetType="StackPanel" BasedOn="{StaticResource {x:Type StackPanel}}" />
            </ItemsPanelTemplate.Resources>
            <StackPanel />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

Типы, которые не наследуются от Control не будет подбирать неявные стили, если вы этого не сделаете.

...