wpf xaml resources

¿Cómo mantienes tus recursos de WPF organizados en grandes proyectos?



xaml resources (1)

Incluso en los ejemplos y prototipos más pequeños de WPF que he estado haciendo, <Windows.Resources> comienza a hincharse rápidamente . Ponerlo de nuevo en app.xaml lo saca todo de Windows y UserControls, pero es difícil de organizar (la función de "plegado de XAML" de Visual Studio no sirve de ayuda, ya que solo tienes una página llena de la palabra "Estilo ... ").

Además, estoy luchando para encontrar una manera fácil y fácil de recordar de nombrar mis estilos . La mejor manera la he encontrado para ser larga y descriptiva, 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 los nombres de estilo para localizarlos fácilmente en páginas y páginas de XAML.

¿Cuáles son sus estrategias para evitar que los recursos de WPF se vuelvan difíciles de manejar?

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


Use los ResourceDictionary separados y combínelos en los niveles apropiados de 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>