Использование ресурсов xaml, но сохранение уникального контента для каждой ссылки - PullRequest
1 голос
/ 08 сентября 2010

У меня есть несколько ListBox, и я настроил стиль группы, чтобы сделать группы расширением.Я хочу, чтобы все ListBoxes использовали одну и ту же информацию о стиле, чтобы сделать их все расширителями, но я хочу иметь возможность изменять содержимое заголовка, чтобы оно было индивидуальным для каждого использования стиля.

Есть ли какие-либоспособ, которым я могу взять из, но все еще редактировать содержание

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

<ListBox x:Name="listBox1" ItemsSource="{Binding}" Height="571" Width="260">

        <ListBox.GroupStyle>
            <GroupStyle>
                <GroupStyle.ContainerStyle>
                    <Style TargetType="{x:Type GroupItem}">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type GroupItem}">
                                    <Expander IsExpanded="True" Style="{StaticResource GroupBoxExpander}">
                                        <Expander.Header>

                                            <Grid Width="190" Background="Yellow">

                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition Width="40" />
                                                    <ColumnDefinition Width="40" />
                                                </Grid.ColumnDefinitions>

                                                <TextBlock Grid.Column="0" Text="Count:" />
                                                <TextBlock Grid.Column="1" Text="{Binding Path=ItemCount}" />

                                            </Grid>

                                        </Expander.Header>
                                        <Expander.Content>
                                            <ItemsPresenter Margin="15,0,0,0"></ItemsPresenter>
                                        </Expander.Content>
                                    </Expander>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </GroupStyle.ContainerStyle>
            </GroupStyle>
        </ListBox.GroupStyle>

        <ListBox.ItemTemplate>
            <DataTemplate>
                <local:ItemControl1 />
            </DataTemplate>
        </ListBox.ItemTemplate>

    </ListBox>

Любая помощь очень ценится!

Спасибо за чтение

Ответы [ 2 ]

1 голос
/ 08 сентября 2010

GroupItem - это ContentControl, поэтому вы можете использовать один и тот же шаблон с другим ContentTemplate.Разделите ваш стиль следующим образом:

<Style TargetType="{x:Type GroupItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type GroupItem}">
                <Expander IsExpanded="True" >
                    <Expander.Header>
                        <ContentPresenter/>
                    </Expander.Header>
                    <Expander.Content>
                        <ItemsPresenter Margin="15,0,0,0"></ItemsPresenter>
                    </Expander.Content>
                </Expander>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <Grid Width="190" Background="Yellow">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="40" />
                        <ColumnDefinition Width="40" />
                    </Grid.ColumnDefinitions>
                    <TextBlock Grid.Column="0" Text="Count:" />
                    <TextBlock Grid.Column="1" Text="{Binding Path=ItemCount}"/>
                </Grid>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

ContentPresenter в ControlTemplate создаст экземпляр DataTemplate, поэтому он будет выглядеть так же, но вы можете настроить заголовок, заменив DataTemplate.Вы можете создать базовый стиль с ControlTemplate, а затем создать другие стили, основанные на этом, которые повторно используют ControlTemplate, но имеют другой DataTemplate.

<Style TargetType="{x:Type GroupItem}"
       x:Key="BaseGroupStyle">
    <Setter Property="Template" .../>
</Style>
<Style TargetType="{x:Type GroupItem}"
       BasedOn="{StaticResource BaseGroupStyle}"
       x:Key="CountGroupStyle">
    <Setter Property="ContentTemplate" .../>
</Style>
0 голосов
/ 08 сентября 2010

Вы пытались поместить Шаблон (или Стиль) в раздел Ресурсы и установить x: Shared = "false"?

...