Как установить свойство данных для стиля кнопки в wpf? - PullRequest
1 голос
/ 15 сентября 2009

В этом примере свойство:

Data= M150.655, 39.109L10.407, 53.785L0.602, 1.309l158.026-0.806L150.655, 39.109z

Как это Data свойство работает и использует эти 5 значений?

<Style x:Key="ButtonStyler"

     TargetType="{x:Type Button}">
<Setter Property="Cursor"
        Value="Hand" />
<Setter Property="Template">

  <Setter.Value>
    <ControlTemplate
      TargetType="{x:Type Button}">
      <Grid>

        <Path x:Name="ButtonBG"
              Fill="Lime"
              Stroke="#000000"
              StrokeThickness="3"  

              Data="M150.655,39.109L10.407,53.785L0.602,1.309l158.026-0.806L150.655,39.109z" />
        <ContentPresenter x:Name="ContentSite"
                          Margin="20,10,20,10"
                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                          TextBlock.FontFamily="Comic Sans MS"
                          TextBlock.FontSize="20">
          <ContentPresenter.RenderTransform>
            <TransformGroup>
              <TransformGroup.Children>
                <TransformCollection>
                  <RotateTransform Angle="-5" />
                  <ScaleTransform ScaleX="1.5"
                                  ScaleY="1" />
                  <TranslateTransform X="-35"
                                      Y="0" />
                </TransformCollection>
              </TransformGroup.Children>
            </TransformGroup>
          </ContentPresenter.RenderTransform>
        </ContentPresenter>
      </Grid>
      <ControlTemplate.Triggers>
        <Trigger Property="IsMouseOver"
                 Value="true">
          <Setter Property="Path.Fill"
                  Value="yellow"
                  TargetName="ButtonBG" />
        </Trigger>
        <Trigger Property="IsPressed"
                 Value="true">
          <Setter Property="Path.Fill"
                  Value="lime"
                  TargetName="ButtonBG" />
        </Trigger>
      </ControlTemplate.Triggers>
    </ControlTemplate>
  </Setter.Value>
</Setter>
<Style.Triggers>
  <Trigger Property="IsMouseOver"
           Value="true">
    <Setter Property="RenderTransform">
      <Setter.Value>
        <TransformGroup>
          <TransformGroup.Children>
            <TransformCollection>
              <RotateTransform Angle="-5" />
              <TranslateTransform X="-5"
                                  Y="0" />
            </TransformCollection>
          </TransformGroup.Children>
        </TransformGroup>
      </Setter.Value>
    </Setter>
  </Trigger>
  <Trigger Property="IsPressed"
           Value="true">
    <Setter Property="RenderTransform">
      <Setter.Value>
        <TransformGroup>
          <TransformGroup.Children>
            <TransformCollection>
              <RotateTransform Angle="-5" />
              <TranslateTransform X="-5"
                                  Y="5" />
            </TransformCollection>
          </TransformGroup.Children>
        </TransformGroup>
      </Setter.Value>
    </Setter>
  </Trigger>
</Style.Triggers>

Ответы [ 2 ]

3 голосов
/ 15 сентября 2009

Данные - это свойство объекта Path в вашем шаблоне ...

http://msdn.microsoft.com/en-us/library/ms745814.aspx

редактирование:

Из документа MSDN: Строка атрибута Data начинается с команды «moveto», обозначенной буквой M, которая устанавливает начальную точку для пути в системе координат Canvas. Параметры данных пути чувствительны к регистру. Прописная буква М указывает на абсолютное местоположение новой текущей точки. Строчная буква m будет указывать относительные координаты. Первый сегмент представляет собой кубическую кривую Безье, начинающуюся с (100 200) и заканчивающуюся (400 175), нарисованную с использованием двух контрольных точек (100,25) и (400,350). Этот сегмент обозначается командой C в строке атрибута Data. Опять же, заглавная буква C указывает на абсолютный путь; строчная буква c будет указывать относительный путь.

Второй сегмент начинается с абсолютной горизонтальной команды «lineto» H, которая определяет линию, проведенную от конечной точки предыдущего подпути (400,175) до новой конечной точки (280,175). Поскольку это горизонтальная команда "lineto", указанное значение является координатой X.

Полный синтаксис пути см. В справочнике Данные и Инструкции : создание фигуры с помощью PathGeometry .

Надеюсь, это поможет:)

Ian

2 голосов
/ 29 сентября 2009

Свойство данных, связанное с формами и геометрией пути, не входит непосредственно в него, сначала просто прочитайте основы геометрии пути, затем вы сможете понять свойство данных любой формы.

...