2009-04-08 13 views
2

私はWPFアプリケーションを作成すると、非常に迅速に自分のXAMLが膨らみ始める。XAMLをスタイルに変換するための戦略は何ですか?

私はで、XAML/styleの問題をHTML/CSSの方法に近づけて、繰り返しコードを探し、それを私のWindow.Resourcesセクションに入れるスタイルにパックします。

これは他人がやっているやり方なのですか、それともXAMLではもっと良い方法がありますか?ちょうど2つのブロックが2つの小さな単語で異なるだけのように思えます私は何らかの機能的なユーザコントロール(これは左側のメニューです)に入れて、私のメニューに25の要素があるとき私は名前とクリックターゲットと同じ行を25行だけ持つことができます。

それとも、私はこの問題をMVVMするためにこれを移動した場合(それがcurrrentlyだけでハードコーディングされたプロトタイプです)をデータバインディングを使用して自身の世話をしますので、私は私の中でのコレクションで、メニュー項目の名前を保つことができます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> 

答えて

1

:反復を識別し、コントロールに移動。コントロールは、実行時に必要なバリエーションを作成するために必要なプロパティを持つことができます。そして、それはコントロールであることによって再テンプレートすることができます。

+0

私はUserControlsを使用してコンテンツのページを読み込んでいましたが(各ページはユーザーコントロールです)、ページ上での繰り返しは少ししかありませんでしたが、 //msdn.microsoft.com/en-us/magazine/cc163421.aspx –

0

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

関連する問題