如何在wpf中设置按钮样式的数据属性?

时间:2009-09-15 06:03:30

标签: c# wpf wpf-controls styles

在此示例属性中:

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 个答案:

答案 0 :(得分:3)

数据是模板中Path对象的属性...

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

编辑:

来自msdn doco: Data属性字符串以“moveto”命令开头,由M表示,它为Canvas的坐标系中的路径建立起点。路径数据参数区分大小写。大写字母M表示新当前点的绝对位置。小写的m表示相对坐标。第一段是从(100,200)开始到(400,175)结束的三次贝塞尔曲线,使用两个控制点(100,25)和(400,350)绘制。此段由数据属性字符串中的C命令指示。同样,大写字母C表示绝对路径;小写字母c表示相对路径。

第二段以绝对水平“lineto”命令H开始,该命令指定从前一个子路径的端点(400,175)到新端点(280,175)绘制的线。因为它是水平“lineto”命令,所以指定的值是x坐标。

有关完整路径语法,请参阅Data参考和如何: Create a Shape by Using a PathGeometry

希望这会有所帮助:)

伊恩

答案 1 :(得分:2)

与形状和路径几何相关联的数据属性不会直接进入它,首先只需阅读路径几何的基础知识,然后您就能理解任何形状的数据属性。