WPF アプリケーションを作成すると、すぐに XAML が膨張し始めます。
次に、HTML/CSS の方法で XAML/スタイルの問題に取り組み、反復的なコードを探し、それをスタイルにまとめて Window.Resources セクションに入れます。
これは他の人が行っている方法ですか、それとも XAML でより良い方法がありますか? 以下の 2 つのブロックは 2 つの小さな単語だけが異なるようです。メニューに 25 の要素がある場合にできるように、ある種の機能的なユーザー コントロール(これは左側のメニュー) に配置できるようです。名前とおそらくクリックターゲットと同じ25行だけがあります。
または、これを MVVM に移動すると、この問題は DataBinding で自動的に処理されるため(現在はハードコードされたプロトタイプにすぎません)、メニュー項目の名前を ViewModel のコレクションに保持してから、メニューは、ItemsControl で動的に?
または、肥大化した XAML ファイルは、WPF アプリケーションでは当たり前のことなのでしょうか?
WPF アプリケーションを作成するとき、どのような XAML スタイリング戦略を採用していますか?
Window.Resources (ファイルの上部):
<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:
<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>