Auf selbst die kleinsten WPF-Beispiele und Prototypen, die ich gemacht habe, beginnt die <Windows.Resources>
schnell zu blähen. Putting es zurück in app.xaml
bringt es alles aus meinem Windows und UserControls, aber es ist schwer zu organisieren (die Visual Studio "XAML Falten" -Funktion ist keine Hilfe, da Sie nur eine Seite voll mit dem Wort "Style ... ").Wie halten Sie Ihre WPF-Ressourcen in großen Projekten organisiert?
Darüber hinaus habe ich Schwierigkeiten, auf eine leicht zu erinnern und organisierte Art und Weise von Benennung meiner Stile zu kommen. Der beste Weg, wie ich es gefunden habe, um lange und beschreibend zu sein, so bekomme ich Dinge wie: BottomMainLeftScrollViewerStyle, etc. Aber das hat seine Grenzen und wird bald auch verwirrend. Ich entschied mich, camelCase für Stilnamen zu verwenden, um sie leicht in Seiten und Seiten von XAML zu finden.
Was sind Ihre Strategien für die Verhinderung von unhandlichen WPF-Ressourcen?
<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>
Nur eine kurze Notiz hinzuzufügen, wenn Sie auch auf die obige andere Ressourcen hinzuzufügen, legen Sie sie nach dem MergedDictionaries Abschnitt ... also benötigen: . .. ResourceDictionary> Ziemlich einfach, aber nicht sofort offensichtlich. –
"... füge sie in die entsprechenden Ebenen in deinem visuellen Baum ein ...": Was bedeutet das? Ich verstehe, was Listendateien in der MergedDictionaries-Auflistung in App.xaml ist. Ist Mergig in "angemessene Levels" etwas anspruchsvoller? – Slauma