XAML: создание DataTemplate для ViewModel, представленной в Expander - PullRequest
0 голосов
/ 31 мая 2011

Допустим, у меня есть пользовательский элемент управления, похожий на Expander, и я буду показывать несколько типов объектов в этом расширителе. Я хочу определить DataTemplate для каждого типа объекта.

Теперь я хочу показать конкретную информацию, когда она не развернута, и что-то еще, когда она есть.

Обычно с расширением он показывает только то, что связано со свойством Header.

Можно ли как-то определить две области в шаблоне данных для каждого представления?

Возможно, есть какой-нибудь другой блестящий способ сделать это?

Ответы [ 2 ]

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

Рассматривали ли вы просто использовать TabControl? Например, вы можете добавить две вкладки и стилизовать их. Вот код для оформления вкладок:

    <Style TargetType="{x:Type TabPanel}">
        <!--Whatever you need for tab position (here center) -->
        <Setter Property="HorizontalAlignment" Value="Center" />
    </Style>

и

           <ControlTemplate x:Key="TabItemTemplate" TargetType="{x:Type TabItem}">
                <!-- Place whatever control you want for design (grid, dockpanel... -->
                <!-- And then the triggers you'd need for, here, color if selected or not, as an example -->
                <ControlTemplate.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter TargetName="Border" Property="Background" Value="Blue" />
                    </Trigger>
                    <Trigger Property="IsSelected" Value="False">
                        <Setter TargetName="Border" Property="Background" Value="WhiteSmoke" />
                    </Trigger>

                </ControlTemplate.Triggers>
            </ControlTemplate>

Это естественный способ думать об этом. Вы можете расширить этот код, например, добавить триггер, изменяющий выбранную вкладку, когда нажимаете на единственную видимую вкладку. В любом случае, описываемое вами поведение больше подходит для TabControl, чем Expander

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

Попробуйте это:

<DataTemplate x:Key="ExpanderItemDataTemplate">
        <Grid x:Name="LayoutRoot">
            <Grid x:Name="ExpandedContent" />
            <Grid x:Name="CollapsedContent" />
        </Grid>
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding IsExpanded, RelativeSource={RelativeSource AncestorType=local:YourCustomControl}}"
                         Value="True">
                <Setter Property="Visibility"
                        TargetName="ExpandedContent"
                        Value="Visible" />
                <Setter Property="Visibility"
                        TargetName="CollapsedContent"
                        Value="Collapse" />
            </DataTrigger>
            <DataTrigger Binding="{Binding IsExpanded, RelativeSource={RelativeSource AncestorType=local:YourCustomControl}}"
                         Value="False">
                <Setter Property="Visibility"
                        TargetName="ExpandedContent"
                        Value="Collapse" />
                <Setter Property="Visibility"
                        TargetName="CollapsedContent"
                        Value="Visible" />
            </DataTrigger>
        </DataTemplate.Triggers>

...