gpt4 book ai didi

wpf - 您如何在大型项目中组织 WPF 资源?

转载 作者:行者123 更新时间:2023-12-03 14:56:11 25 4
gpt4 key购买 nike

即使是我一直在做的最小的 WPF 示例和原型(prototype), <Windows.Resources>开始快速膨胀 .放回app.xaml将其全部排除在我的 Windows 和 UserControls 之外,但它是 难以组织 (Visual Studio 的“XAML 折叠”功能没有任何帮助,因为您只有一个充满“样式...”一词的页面)。

此外,我正在努力寻找一种易于内存且有条理的 方式。命名我的风格 .我发现它的最佳方式是冗长且具有描述性,所以我得到这样的东西:BottomMainLeftScrollViewerStyle 等。但这有其局限性,很快也会让人感到困惑。我决定使用 样式名称的驼峰式 轻松地在 XAML 的页面和页面中发现它们。

你的策略是什么为了防止 WPF 资源变得笨拙?

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

最佳答案

使用单独的 ResourceDictionary s 并根据需要将它们合并到可视化树中的适当级别。

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

关于wpf - 您如何在大型项目中组织 WPF 资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/794113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com