2011-12-05 8 views
1

ポップアップのスタイルを作成する必要があります。彼らは重要ではありませんので、私はこのコードからグリッドの行と列の定義のようないくつかの要素を遮断しているエラー: 'System.Windows.Controls.Primitives.Popup'タイプのスタイルプロパティ 'テンプレート'が見つかりません

<Style x:Key="PopupBox" TargetType="{x:Type Popup}"> 
    <Setter Property="OverridesDefaultStyle" Value="True" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Popup}">  
       <Grid> 
        <Border BorderBrush="Blue" Background="#FFFFFFFF"> 
         <Grid>         
          <Border Background="AliceBlue"/> 
          <ContentPresenter ContentSource="Header" /> 
          <ContentPresenter/> 
          <Border BorderBrush="#FFFFFFFF" Background="#FFBFDBFF"/> 
         </Grid> 
        </Border> 
       </Grid>      
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

:私は、WPFと.NET Framework 4

私が書かれているスタイルを使用しています。

ポップアップコントロールにはこのプロパティがないため、<Setter Property="Template">を使用できないようです。これを回避するにはどうしたらいいですか?

ここで何かお手伝いをしてください!

答えて

9

ポップアップがコンテンツの任意のテンプレートとちょうどChild性質を持っているdoesnの `tとして、あなたのスタイルとテンプレートに(たとえばContentControlのために)いくつかの他のコントロールを使用することができます。

<Style x:Key="PopupContentStyle" TargetType="ContentControl"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ContentControl"> 
       <Border BorderBrush="Blue" Background="#FFFFFFFF"> 
        <Grid>         
         <Border Background="AliceBlue"/> 
         <ContentPresenter/> 
         <Border BorderBrush="#FFFFFFFF" Background="#FFBFDBFF"/> 
        </Grid> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

それからちょうどすべてのPopupに置きますそれはそれを必要とします:

<Popup> 
    <ContentControl Style={StaticResource PopupContentStyle}> 
     <!-- Some content here --> 
    </ContentControl> 
</Popup> 
+0

解決策が動作しています。ありがとう! – Marta

2

テンプレートのみControlクラスはテンプレートのプロパティを公開するのでControlクラスから継承コントロールを設定することができます。しかし、PopUpはFrameworkElementクラスから直接継承されているので、Templateプロパティを設定することができません。回避策として、このようなChildプロパティを設定することができます。 -

<Setter Property="Child"> 
     <Setter.Value>  
       <Grid> 
        <Border BorderBrush="Blue" Background="#FFFFFFFF"> 
         <Grid>         
          <Border Background="AliceBlue"/> 
          <ContentPresenter ContentSource="Header" /> 
          <ContentPresenter/> 
          <Border BorderBrush="#FFFFFFFF" Background="#FFBFDBFF"/> 
         </Grid> 
        </Border> 
       </Grid> 
     </Setter.Value> 
</Setter> 
+0

このアプローチでは、 'Popup'コンテンツをXAMLに設定することはできません。これは' Style'設定をオーバーライドするためです。 – icebat

+0

それは私が推測する質問でカッサンドラが望んだものです。彼/彼女はポップアップ用のコントロールテンプレートを設定しようとしています。このコントロールテンプレートは、このスタイルが適用されている既定のテンプレートを最終的にオーバーライドします。 –

+0

Templateの中に 'ContentPresenter'があると判断して、' Popup'の内容を静的にしてはいけません。 'Child'をスタイルで設定した場合、そのスタイルをオーバーライドしないで' Popup'自体にコンテンツを追加するにはどうすればいいですか? – icebat

関連する問題