Как уменьшить мой код, количество практически идентичных структур может быть очень большим - PullRequest
3 голосов
/ 19 сентября 2011

Может быть, это очень простой вопрос, но я не могу найти ответ: Как уменьшить мой код, количество практически идентичных структур может быть очень большим:

Например

<Windows:HierarchicalDataTemplate x:Key="**Level2ItemTemplate**"
                                      ItemsSource="{Binding Children}"
                                      ItemTemplate="{StaticResource **Level3ItemTemplate**}">
        <Grid Height="100"
              Width="100"
              Margin="5">
            <Border Padding="5"
                    BorderThickness="1"
                    BorderBrush="#FFADADAD"
                    CornerRadius="5">
                <Border.Background>
                    <LinearGradientBrush EndPoint="0.5,1"
                                         StartPoint="0.5,0">
                        <GradientStop Color="#FFD47E00"
                                      Offset="0" />
                        <GradientStop Color="#FF563300"
                                      Offset="1" />
                    </LinearGradientBrush>
                </Border.Background>
                <TextBox TextWrapping="Wrap"
                         Text="{Binding Title, Mode=TwoWay}"
                         VerticalAlignment="Center"
                         HorizontalAlignment="Center"
                         FontWeight="Bold"
                         FontSize="13.333"
                         Style="{StaticResource EditableTitleStyle}" />
            </Border>
            <Image HorizontalAlignment="Right"
                   Source="add.png"
                   Stretch="Fill"
                   Width="16"
                   VerticalAlignment="Bottom"
                   Margin="0,0,2,2"
                   Height="16">
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="MouseLeftButtonDown">
                        <Graph:AddSpiderItemAction />
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </Image>
            <Image HorizontalAlignment="Right"
                   Height="16"
                   Source="remove.png"
                   Stretch="Fill"
                   VerticalAlignment="Top"
                   Width="16"
                   Margin="0,2,2,0">
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="MouseLeftButtonDown">
                        <Graph:RemoveSpiderItemAction />
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </Image>
        </Grid>
    </Windows:HierarchicalDataTemplate>
    <Windows:HierarchicalDataTemplate x:Key="**Level1ItemTemplate**"
                                      ItemsSource="{Binding Children}"
                                      ItemTemplate="{StaticResource **Level2ItemTemplate**}">
        <Grid Height="100"
              Width="100"
              Margin="5">
            <Border Padding="5"
                    BorderThickness="1"
                    BorderBrush="#FFADADAD"
                    CornerRadius="5">
                <Border.Background>
                    <LinearGradientBrush EndPoint="0.5,1"
                                         StartPoint="0.5,0">
                        <GradientStop Color="#FFB5B5B5"
                                      Offset="0" />
                        <GradientStop Color="#FF474747"
                                      Offset="1" />
                    </LinearGradientBrush>
                </Border.Background>
                <TextBox TextWrapping="Wrap"
                         Text="{Binding Title, Mode=TwoWay}"
                         VerticalAlignment="Center"
                         HorizontalAlignment="Center"
                         FontWeight="Bold"
                         FontSize="13.333"
                         Style="{StaticResource EditableTitleStyle}" />
            </Border>
            <Image HorizontalAlignment="Right"
                   Source="add.png"
                   Stretch="Fill"
                   Width="16"
                   VerticalAlignment="Bottom"
                   Margin="0,0,2,2"
                   Height="16">
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="MouseLeftButtonDown">
                        <Graph:AddSpiderItemAction />
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </Image>
            <Image HorizontalAlignment="Right"
                   Height="16"
                   Source="remove.png"
                   Stretch="Fill"
                   VerticalAlignment="Top"
                   Width="16"
                   Margin="0,2,2,0">
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="MouseLeftButtonDown">
                        <Graph:RemoveSpiderItemAction />
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </Image>
        </Grid>
    </Windows:HierarchicalDataTemplate>

и так далее ...

Ответы [ 2 ]

8 голосов
/ 19 сентября 2011

Вы можете извлечь те же части макета в отдельные DataTemplates, см. Класс DataTemplate . И те же стили в отдельных стилях.

Взгляните на очень приятную статью MSDN Настройка управления , в которой описываются шаблоны, стили, детали и модели состояния.

Великолепные статьи ScottGu's:

2 голосов
/ 19 сентября 2011

Вы можете создавать стили для общих элементов.Например, создайте стиль для границы, один для текстового поля и т. Д. Затем примените эти стили внутри шаблона данных к соответствующим элементам.

Это уменьшит шаблоны данных, а также уменьшит объем памяти.поскольку данные стиля не дублируются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...