2011-02-10 3 views
1

申し訳ありませんが、こんにちは質問ですが、私はApp.xamlでスタイルリソースがCanvasになる方法があるかどうかを見ています。それは別のキャンバスのStyleにある。私が想像するリソースは次のようなものになるだろう:スタイルとして子どもを持つキャンバス

<Style x:Key="Background1" TargetType="Canvas"> 
      <Setter Property="Width" Value="500"/> 
      <Setter Property="Height" Value="600" /> 
      <Setter Property="Background" Value="Red"/> 
      <Setter Property="Children"> 
       <Setter.Value> 
        <Rectangle Canvas.Top="20" Canvas.Left="20" Width="100" Height="100" Fill="Yellow"></Rectangle> 
       </Setter.Value> 
      </Setter> 
     </Style> 

そして、それはのように簡単になり呼び出す:

<Canvas Style="{StaticResource Background1}" x:Name="CanvasRoot" > 
    <Rectangle x:Name="PageRectangle" Canvas.Left="114" Canvas.Top="84" Height="378" Width="210" Stroke="#92D050" Fill="#C0504D" /> 
</Canvas> 

このような何かを行うことができる場合に任意の考え。 Canvasに「Children」プロパティがないため、私が行ったことは機能しません。

+0

あなたはこれをしたい理由を説明した場合、それは良いかもしれないを与える必要がありますか?あらかじめ設定されたコントロール、UserControl、カスタムテンプレートコントロール、添付プロパティを提供するには、いくつかの方法があります。しかし、最善のアドバイスを特定することは難しいです。 – AnthonyWJones

答えて

3

スタイルを使用してキャンバスに子を追加したいですか?私はこれが単にできないのではないかと心配しています。スタイルは、高さ、背景、ストロークなどの要素依存プロパティの値を設定することができます。また、それらを使用して添付プロパティを設定することもできます。ただし、設定しようとしているChildrenプロパティは依存プロパティではありません。ビジュアルツリー内のキャンバスの子を表す子要素のコレクションです。

スタイルを使用してビジュアルツリーに新しい要素を追加する唯一の方法は、それらをいくつかのコントロールテンプレートに追加することです。残念ながら、テンプレートパネル(Canvas、Grid、StackPanel)は使用できません。 ContentControlを使用してテンプレートの一部として四角形を追加することができます。

ContentControlは、1つの子の見た目のないコンテナです。ここで説明するテンプレートを参照してください:

http://msdn.microsoft.com/en-us/library/dd334411%28VS.95%29.aspx

ここでは、四角形を追加するために、テンプレートです。私はあなたが達成しようとしているものをレイアウトわからないが、それはあなたの一般的な考え

<Style TargetType="ContentControl" x:Key="myContentControl"> 
     <Setter Property="Foreground" Value="#FF000000"/> 
     <Setter Property="HorizontalContentAlignment" Value="Left"/> 
     <Setter Property="VerticalContentAlignment" Value="Top"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ContentControl"> 
        <Canvas> 
        <Rectangle Canvas.Top="20" Canvas.Left="20" Width="100" Height="100" Fill="Yellow"></Rectangle> 
        <ContentPresenter 
         Content="{TemplateBinding Content}" 
         ContentTemplate="{TemplateBinding ContentTemplate}" 
         Cursor="{TemplateBinding Cursor}" 
         Margin="{TemplateBinding Padding}" 
         HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
         VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
        </Canvas> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 

<ContentControl Style={StaticResource myContentControl}> 
    <Canvas x:Name="CanvasRoot" > 
    <Rectangle x:Name="PageRectangle" Canvas.Left="114" Canvas.Top="84" Height="378" Width="210" Stroke="#92D050" Fill="#C0504D" /> 
    </Canvas> 
</ContentControl> 
+0

+1これは良い答えです。キャンバスをスタイルで事前入力するのはなぜ難しいのですか?提案された解決策についてはわかりませんが、OPが実際に達成しようとしていることを実際にはわからないためです。 – AnthonyWJones

関連する問題