2011-02-10 3 views
1

죄송합니다.이 질문이 빽빽하게 들지만, App.xaml에서 스타일 리소스가 Canvas 인 방법이 있는지 살펴보고 해당 캔버스에 어린이가 있고 그냥 참조해야합니다. 그것을 다른 캔버스의 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> 

어떤 생각 : 그것은처럼 간단 할 것이다 호출

<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에 "Children"속성이 없기 때문에 내가 한 것은 효과가 없습니다.

+0

당신은 당신이하고 싶은 이유를 설명 경우가 더 좋을 수도를 제공해야합니까? 미리 채워진 컨트롤, UserControl, 사용자 지정 템플릿 컨트롤, 연결된 속성을 제공하는 데는 여러 가지 방법이 있습니다. 그러나 최선의 조언을 결정하는 것은 특성이 없으면 어렵습니다. – AnthonyWJones

답변

3

그래서 스타일을 통해 Canvas에 하위를 추가 하시겠습니까? 나는 이것이 단순히 가능하지 않다는 것을 두려워합니다. 스타일을 사용하면 높이, 배경, 획 등과 같은 요소 종속성 속성의 값을 설정할 수 있습니다.이 속성을 사용하여 연결된 속성을 설정할 수도 있습니다. 그러나 설정하려고하는 Children 속성은 종속성 속성이 아니라 시각적 트리에서 캔버스의 자식을 설명하는 children 요소의 컬렉션입니다.

시각적 트리를 스타일을 사용하여 추가하는 유일한 방법은 일부 컨트롤 템플릿에 추가하는 것입니다. 안타깝게도 템플릿 패널 (Canvas, Grid, StackPanel)은 사용할 수 없습니다. ContentControl을 사용하여 사각형을 템플릿의 일부로 추가 할 수 있습니다.

ContentControl은 단일 자식의 뚜껑없는 컨테이너입니다. 템플릿이 여기에 설명을 참조하십시오 :

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 좋은 답변입니다. 스타일을 통해 Canvas를 미리 채우는 것이 왜 어려운지에 대한 좋은 설명입니다. 제안 된 솔루션에 대해서는 확신 할 수 없지만 실제로 OP가 실제로 달성하려고 시도하고 있는지 알지 못하기 때문입니다. – AnthonyWJones