2

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

2 に答える 2

1

シンプル: 繰り返しを特定し、それをコントロールに移動します。コントロールには、実行時に必要なバリエーションを構成するために必要なプロパティを含めることができます。また、コントロールであるため、再テンプレート化できます。

于 2009-04-08T08:42:36.440 に答える
0

また、繰り返しを特定してリソースに移動することもできます。1 つのリソースから別のリソースを簡単に参照できます。

于 2009-04-08T17:20:34.493 に答える