代码之家  ›  专栏  ›  技术社区  ›  Jaswant Agarwal

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

  •  1
  • Jaswant Agarwal  · 技术社区  · 15 年前

    在此示例属性中:

    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 回复  |  直到 13 年前
        1
  •  2
  •   Panda    15 年前

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

        2
  •  3
  •   kiwipom    15 年前

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

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

    编辑:

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

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

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

    希望这有帮助:)

    伊恩