Холст с детьми как стиль - PullRequest
       2

Холст с детьми как стиль

1 голос
/ 10 февраля 2011

Извините, если это сложный вопрос, но я смотрю, есть ли способ иметь ресурс стиля Canvas в 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.

1 Ответ

3 голосов
/ 10 февраля 2011

То есть вы хотите добавить ребенка на холст через стиль?Боюсь, это просто невозможно.Стили позволяют устанавливать значения свойств зависимостей элементов, таких как Высота, Фон, Обводка и т. Д. Вы также можете использовать их для установки вложенных свойств.Однако свойство 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...