2009-04-27 7 views
16

En incluso los ejemplos y prototipos más pequeños de WPF que he estado haciendo, el <Windows.Resources> comienza a hincharse rápido. Poniéndolo de nuevo en app.xaml lo pone todo fuera de mi Windows y UserControls pero es difícil de organizar (la función Visual Studio "XAML plegable" no es de ayuda ya que solo tiene una página llena de la palabra "Estilo ... ").¿Cómo se mantienen organizados los recursos de WPF en grandes proyectos?

Además, estoy luchando por encontrar una forma fácil de recordar y organizada de nombrando mis estilos. La mejor manera en que lo he encontrado es que es largo y descriptivo, así que obtengo cosas como esta: BottomMainLeftScrollViewerStyle, etc. Pero esto tiene sus límites y pronto se vuelve confuso también. Decidí usar camelCase para nombres de estilo para detectarlos fácilmente en páginas y páginas de XAML.

¿Cuáles son sus estrategias para evitar que los recursos de WPF se vuelvan poco manejables?

<Window.Resources> 

    <local:CutOffConverter x:Key="AgeConverter" Cutoff="30"/> 

    <Style TargetType="Grid" x:Key="customerGridMainStyle"> 
     <Setter Property="Background"> 
      <Setter.Value> 
       <LinearGradientBrush StartPoint="0,0" EndPoint=".5,.5"> 
        <GradientStop Offset="0.0" Color="#888"/> 
        <GradientStop Offset="1.0" Color="#ccc"/> 
       </LinearGradientBrush> 
      </Setter.Value> 
     </Setter> 
    </Style> 

    <Style TargetType="StackPanel" x:Key="mainStackPanelStyle"> 
     <Setter Property="HorizontalAlignment" Value="Left"/> 
    </Style> 
    <Style TargetType="ScrollViewer" x:Key="mainScrollViewerStyle"> 
     <Setter Property="Height" Value="250"/> 
    </Style> 
    <Style TargetType="ListBox" x:Key="mainListBoxStyle"> 
     <Setter Property="BorderThickness" Value="0"/> 
     <Setter Property="Margin" Value="10"/> 
    </Style> 


    <ObjectDataProvider x:Key="customers" 
         ObjectType="{x:Type local:Customer}" 
         MethodName="GetAllCustomers"/> 

    <DataTemplate DataType="{x:Type local:Customer}"> 
     <Grid x:Name="MainGrid" Style="{StaticResource customerGridMainStyle}"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="100"/> 
       <ColumnDefinition Width="150"/> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition/> 
       <RowDefinition/> 
       <RowDefinition/> 
      </Grid.RowDefinitions> 
      <TextBlock Grid.Column="0" Grid.Row="0" Text="First Name" Margin="5"/> 
      <TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding FirstName}" Margin="5"/> 
      <TextBlock Grid.Column="0" Grid.Row="1" Text="Last Name" Margin="5"/> 
      <TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding LastName}" Margin="5"/> 
      <TextBlock Grid.Column="0" Grid.Row="2" Text="Age" Margin="5"/> 
      <TextBlock x:Name="Age" Grid.Column="1" Grid.Row="2" Text="{Binding Age}" Margin="5"/> 
     </Grid> 
     <DataTemplate.Triggers> 
      <DataTrigger Binding="{Binding Path=Age, Converter={StaticResource AgeConverter}}"> 
       <DataTrigger.Value>true</DataTrigger.Value> 
       <Setter TargetName="Age" Property="Foreground" Value="Red"/> 
      </DataTrigger> 
     </DataTemplate.Triggers> 
    </DataTemplate> 
</Window.Resources> 

Respuesta

15

uso separado ResourceDictionary s y ellos se funden en los niveles apropiados en su árbol visual, según sea necesario.

<App ...> 
    <App.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="ListBoxResources.xaml"/> 
       <ResourceDictionary Source="ComboBoxResources.xaml"/> 
       <ResourceDictionary Source="LabelResources.xaml"/> 
       <ResourceDictionary Source="TextBoxResources.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
      <!-- if you have local resources, place them here. 
       (as noted by Mark Synowiec in the comments) 
      --> 
     </ResourceDictionary> 
    </App.Resources> 
</App> 
+2

sólo para añadir una nota rápida, si también tiene necesidad de añadir otros recursos de lo anterior, los coloca después de la sección MergedDictionaries ... es decir: . .. Bastante simple, pero no inmediatamente obvio. –

+0

"... fusionarlos en los niveles apropiados en su árbol visual ...": ¿Qué significa esto? Entiendo qué es el listado de archivos de recursos en la colección MergedDictionaries en App.xaml. ¿Es mergig en "niveles apropiados" algo más sofisticado? – Slauma

Cuestiones relacionadas