2017-02-20 7 views
1

私はWindowsフォームの背景から来て、私はコントロールの表示を制御するためのベストプラクティスと思われるものについて少し混乱しています。私はいくつかの "アイキャンディー"をしたいと思っているコントロールに取り組んでいます。 WinFormsでは、あらゆる種類のビジュアルプログラミングを行うためにペイントイベントをオーバーライドします。私は、WPFが主に考えられた理由は、アクションをディスプレイから分離することであると理解しています。カスタムコントロールテンプレート、表示とWPF

ここに私が確信している部分があります。私はコントロールの "背景"にいくつかの単純な線を描きたいとします。 WinFormsのように、行をテンプレートに追加するか、コードの後ろにDrawing of the Lineを作成するのがベストプラクティスと考えられますか?

CustomControl1

で行を行う方が良いでしょう。例えば

は私がCustomControl1という名前のコントロールを開発し、垂直のように中央にあるコントロールの幅全体に線を描画したいのですと言いますコードの背後にあるか、テンプレート内にありますか?私はそうのようなXAMLで完全にそれを行うことができます

<Style TargetType="{x:Type local:CustomControl1}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type local:CustomControl1}"> 
        <Border Padding="{TemplateBinding Padding}" 
          Background="{TemplateBinding Background}" 
          BorderBrush="{TemplateBinding BorderBrush}" 
          BorderThickness="{TemplateBinding BorderThickness}"> 

         <Grid HorizontalAlignment="Left" Width="{Binding ActualWidth}"> 

          <Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Aqua"> 
           <Path Stretch="Fill" Stroke="Black" StrokeThickness="1" Data="M 0,0.5 H 1" /> 
          </Border> 

          <TextBlock 
            HorizontalAlignment="Center" 
            Text="Some Text" /> 
         </Grid> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

私は、これは「ベストプラクティス」または私はすべて一緒に使用する必要がありますがあれば、別の方法であるかどうかわからないのですか? 1つをもう一方の上に使用する理由が1つありますか?パフォーマンスの損益はありますか?

+1

WPFコントロールの視覚的な構造は、(デフォルト)スタイルで設定されたTemplateプロパティによって通常定義されます。例えば、 [ControlTemplate](https://msdn.microsoft.com/en-us/library/system.windows.controls.controltemplate(v = vs.110).aspx)ページの*備考*および* Examples *セクションを参照してください。 MSDN。 [スタイルとテンプレート](https://msdn.microsoft.com/en-us/library/ms745683(v = vs.110).aspx)ページの*コントロールテンプレート*セクションも役立ちます。 – Clemens

答えて

0

静的なものはすべてxamlにある必要があります。たとえば、この行が常にこの位置で始まり、このサイズで始まることがわかっている場合は、xamlに入れます。 しかし、線が動的であれば、角度、曲線、色などで1行または複数の線を持つことができます。あなた自身で初期化し、ユーザーコントロールでプロパティを設定することができます。

0

IMO、コードは問題ありません。 WPFのこの種の要件については、誰も "WinFormsで行うように、コードの背後にある線を描く"ことはありません。

ControlTemplateとStyleを使用してコントロールの表示を制御することは、WPFで最も推奨されるアプローチです。また、コードでコントロールが必要な場合は、カスタムコントロールのOnApplyTemplateオーバーライド内でGetTemplateChildメソッドを使用してControlTemplateで定義されたコントロールを取得できます。

関連する問題