2012-01-05 16 views
0

私は、これは基本的にこのようなユーザーコントロールで、私のオーバーレイポップアップをデザイン:私は小さな違いで、このようないくつかのウィンドウを設計する必要がスタイルを再利用するには?

<Grid VerticalAlignment="Center" HorizontalAlignment="Center" MaxWidth="400" MinHeight="150" MinWidth="250"> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="42" /> 
       <RowDefinition Height="*" /> 
      </Grid.RowDefinitions> 

      <Path Grid.ColumnSpan="2" Data="M0,26 L27,26 L27,0 L26,0 z" Fill="#FFFFFF" /> 
      <Border Background="#FFFFFF" Margin="27, 0, 0, 0" /> 
      <Image 
       Source="/Infrastructure.SL;component/Images/img_logo.png" 
       Height="24" HorizontalAlignment="Left" Margin="15,0,0,0" /> 
      <Image 
       Source="/Infrastructure.SL;component/Images/img_tab_ornament.png" 
       Height="26" HorizontalAlignment="Right"/> 

      <Border Grid.Row="1" Grid.RowSpan="3" BorderThickness="1" BorderBrush="#23ceff"> 
       <Border.Effect> 
        <DropShadowEffect Opacity="0.75" Direction="-45" Color="Black" ShadowDepth="3"/> 
       </Border.Effect> 
      </Border> 

      <Border Grid.Row="2" Margin="1,0,1,1" Grid.RowSpan="2"> 
       <Border.Background> 
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
         <GradientStop Color="#fcfff4"/> 
         <GradientStop Color="#cfddea" Offset="1"/> 
        </LinearGradientBrush> 
       </Border.Background> 
      </Border> 

      <my:DitatToolbar Grid.Row="1" Mode="Ok" Margin="1, 0, 1, 0" CaptionsOrientation="Horizontal"/>    

      <Image 
       Grid.Row="2" Height="32" Width="32" 
       VerticalAlignment="Bottom" HorizontalAlignment="Center" 
       Source="{Binding InteractionIconSource}" /> 

      <TextBlock Grid.Row="3" Foreground="#3c3c3c" Text="{Binding Message}" HorizontalAlignment="Center" TextWrapping="Wrap" Margin="10" /> 
     </Grid> 

。このXAMLのほとんどは再利用することができますが、私はそれにどのようにアプローチするのか分かりません。ここの唯一のユニークなXAMLは

<my:DitatToolbar Grid.Row="1" Mode="Ok" Margin="1, 0, 1, 0" CaptionsOrientation="Horizontal"/>    

       <Image 
        Grid.Row="2" Height="32" Width="32" 
        VerticalAlignment="Bottom" HorizontalAlignment="Center" 
        Source="{Binding InteractionIconSource}" /> 

       <TextBlock Grid.Row="3" Foreground="#3c3c3c" Text="{Binding Message}" HorizontalAlignment="Center" TextWrapping="Wrap" Margin="10" /> 

です。他のすべてはクロムです。私は本当にそれを1か所だけに持っていたい。この再利用を達成するためにSilverlightで何を使用できますか?

ベースコントロールを作成して継承する必要がありますが、XAMLの面では快適ではないようです。私のコードはかなり空白ですが、私はMVVMを使用しています

+0

このレンダリングされたコントロールの外観を投稿できますか?私はあなたがそれを見ずに達成しようとしていることを伝えることはできません。 – terphi

答えて

0

多くのアプローチがあります。最も適切な答えは、アプリの全体的な要件によって異なる場合があります。

もっと広い意味で、迅速かつ有益なアプローチはフレームを使用することです。それを試すには、新しいSilverlightプロジェクトを作成し、「Silverlightナビゲーションアプリケーション」テンプレートを選択します。

MainPage.xamlをご覧ください。そこにクロムを入れてから、home.xamlなどと同じ方法で実装されたすべての特定の画面を持つことができます。機能が必要な場合、フレーム/ナビゲーションフレームワークはかなり甘いです。これはブラウザと統合することができ、画面への適切な深いリンクを可能にします。

編集:ContentCtronolを作成するにはそれほど複雑ではありません。ここにすべてを説明するのは少し難しいですが、このリンクはトリックを行う必要があります:http://10rem.net/blog/2010/02/05/creating-customized-usercontrols-deriving-from-contentcontrol-in-wpf-4

+0

ナビゲーションフレームワークが多すぎる可能性があります。私はPRISMを使っているので、地域のものを使うことができますが、理想的には何か「マニュアル」が好きです。 ContentControlでサンプルがありますか? – katit

+0

カスタムControlTemplateを使用したContentControlも私にとって最良のアプローチのように聞こえます。 – terphi