Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 以儿童为风格的画布_Silverlight - Fatal编程技术网

Silverlight 以儿童为风格的画布

Silverlight 以儿童为风格的画布,silverlight,Silverlight,如果这是一个很难回答的问题,很抱歉,但我想看看是否有办法在App.xaml中拥有Canvas的样式资源,并且在该画布上也有子项,只需在另一个画布的样式中引用它。我所设想的资源是: <Style x:Key="Background1" TargetType="Canvas"> <Setter Property="Width" Value="500"/> <Setter Property="Height" Value="6

如果这是一个很难回答的问题,很抱歉,但我想看看是否有办法在App.xaml中拥有
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 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>


有没有想过这样的事情是否可以做到。我所做的不起作用,因为画布上没有“Children”属性。

那么您想通过样式向画布添加一个子元素吗?恐怕这根本不可能。样式允许您设置元素依赖属性的值,例如高度、背景、笔划等。。。也可以使用它们设置附着的特性。但是,您尝试设置的Children属性不是依赖项属性,而是描述可视化树中画布的子元素的子元素集合

使用样式在可视化树中添加新元素的唯一方法是将它们添加到某些控件模板中。不幸的是,您不能使用模板面板(画布、网格、堆栈面板)。您可以使用ContentControl并将矩形添加为其模板的一部分

ContentControl是单个子级的无外观容器。请参见此处描述的模板:

这里是添加矩形的模板。我不确定你想要达到什么样的布局,但它应该给你一个大概的想法

<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>



如果您描述一下为什么要这样做,可能会更好?提供预填充控件、用户控件、自定义模板控件和附加属性有几种方法。然而,如果没有细节,很难确定最佳建议。+1这是一个很好的答案,它很好地解释了为什么通过样式预填充画布很困难。不确定提供的解决方案,但这是因为我们不知道OP真正想要实现什么。
<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>