Domanda

Quando creo applicazioni WPF, molto rapidamente il mio XAML inizia a gonfiarsi.

io poi affrontare il problema XAML/stile in modo HTML/CSS, cercando codice ripetitivo e comprimendolo in stili che inserisco nella sezione Window.Resources.

È questo il modo in cui lo fanno gli altri o esiste ora un modo migliore in XAML?Sembra proprio che i due blocchi sottostanti differiscano solo per due paroline, sembra che potrei inserirlo in una sorta di controllo utente funzionale (questo è un menu sul lato sinistro) in modo che quando ho 25 elementi nel mio menu potrei avere solo 25 righe uguali con i nomi e forse i target di clic.

O forse quando lo sposto su MVVM il problema si risolverà da solo con DataBinding (attualmente è solo un prototipo hardcoded), quindi posso mantenere i nomi delle voci di menu in una raccolta nel mio ViewModel e quindi creare il menu dinamicamente in un ItemsControl?

O i file XAML gonfiati sono solo un dato di fatto con le applicazioni WPF?

Che tipo di strategie di stile XAML hai quando crei applicazioni WPF?

Window.Resources (parte superiore del file):

<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 corrente:

<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>
È stato utile?

Soluzione

Semplice:identificare la ripetizione e spostarla in un controllo.Il controllo può avere qualsiasi proprietà necessaria per comporre le variazioni richieste in fase di esecuzione.E può essere rimodellato poiché è un controllo.

Altri suggerimenti

Inoltre, puoi identificare le ripetizioni e spostarle nelle risorse.Una risorsa può facilmente fare riferimento a un'altra.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top