Каковы ваши стратегии по внедрению XAML в стили? - PullRequest
2 голосов
/ 08 апреля 2009

Когда я создаю приложения WPF, мой XAML очень быстро начинает раздуваться.

Затем я подхожу к вопросу о стиле XAML / HTML / CSS , ища повторяющийся код и упаковывая его в стили, которые я вставил в раздел Window.Resources.

Это так, как это делают другие, или сейчас есть какой-то лучший способ в XAML? Просто кажется, что два блока ниже отличаются только по двум маленьким словам, кажется, что я мог бы поместить его в какой-то функциональный пользовательский элемент управления (это меню слева), так что когда у меня есть 25 элементы в моем меню, я мог бы просто иметь 25 одинаковых строк с именами и, возможно, цели Click.

Или, возможно, когда я перенесу это в MVVM, эта проблема сама решится с помощью DataBinding (в настоящее время это просто жестко запрограммированный прототип), поэтому я могу сохранить названия пунктов меню в коллекция в моей ViewModel, а затем он динамически создает меню в ItemsControl?

Или раздутые файлы XAML - это просто факт жизни с приложениями WPF?

Какие стратегии стиля XAML используются при создании приложений WPF?

Window.Resources (начало файла):

<Window.Resources>
    <Style x:Key="Link" TargetType="Button">
        <Setter Property="Cursor" Value="Hand"/>
        <Setter Property="Foreground" Value="#555"/>
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <TextBlock TextDecorations="Underline" 
                Text="{TemplateBinding Content}"
                Background="{TemplateBinding Background}"/>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsPressed" Value="True">
                            <Setter Property="Foreground" Value="Red"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

Текущий XAML:

<Expander HorizontalAlignment="Left" Header="File" VerticalAlignment="Top" ExpandDirection="Down" Width="200" Padding="2">
    <Expander.Background>
        <LinearGradientBrush>
            <GradientStop Color="#bbb" Offset="0"/>
            <GradientStop Color="#ccc" Offset="1"/>
        </LinearGradientBrush>
    </Expander.Background>
    <Border CornerRadius="5">
        <Border.Background>
            <LinearGradientBrush>
                <GradientStop Color="#ccc" Offset="0"/>
                <GradientStop Color="#bbb" Offset="1"/>
            </LinearGradientBrush>
        </Border.Background>
        <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Top">
            <Button Click="buttonClose_Click" 
                Style="{StaticResource Link}" 
                Margin="10 3 3 3"
                Content="Close">
            </Button>
        </StackPanel>
    </Border>
</Expander>

<Expander HorizontalAlignment="Left" Header="Customers" VerticalAlignment="Top" ExpandDirection="Down" Width="200" Padding="2">
    <Expander.Background>
        <LinearGradientBrush>
            <GradientStop Color="#bbb" Offset="0"/>
            <GradientStop Color="#ccc" Offset="1"/>
        </LinearGradientBrush>
    </Expander.Background>
    <Border CornerRadius="5">
        <Border.Background>
            <LinearGradientBrush>
                <GradientStop Color="#ccc" Offset="0"/>
                <GradientStop Color="#bbb" Offset="1"/>
            </LinearGradientBrush>
        </Border.Background>
        <StackPanel HorizontalAlignment="Left" VerticalAlignment="Top">
            <Button Click="btnAppPage_Click" 
                Tag="CustomerAdd"
                Style="{StaticResource Link}" 
                Margin="10 3 3 3"
                Content="Create Customer"/>
        </StackPanel>
    </Border>
</Expander>

Ответы [ 2 ]

1 голос
/ 08 апреля 2009

Просто: идентифицируйте повторение и переместите его в элемент управления. Элемент управления может иметь любые свойства, необходимые для составления необходимых изменений во время выполнения. И он может быть повторно шаблонизирован благодаря контролю.

0 голосов
/ 08 апреля 2009

Также вы можете идентифицировать повторы и переместить их в ресурсы. Один ресурс может легко ссылаться на другой.

...