none
如何在 ControlTemplate 中,设置 TemplateBinding Height -10 这样的操作? RRS feed

  • 问题

  • 我有一个Label控件,我现在要对它设置ControlTemplate以重新呈现它的外观,代码如下
    <ControlTemplate TargetType="Label" x:Key="PopFrame">
                <Border Width="{TemplateBinding Label.Width}" Height="{TemplateBinding Label.Height}" CornerRadius="5" Background="{DynamicResource PopFrameRectangle1}" BitmapEffect="{DynamicResource PopEffect1}" Padding="5">
                    <Grid>
                        <Border CornerRadius="5" Padding="0,10,0,0" Background="{DynamicResource PopBrush1}">
                            <Rectangle RadiusX="5" RadiusY="5" Fill="{DynamicResource PopBrush2}" />
                        </Border>
                        <Path Name="mPath" Stretch="Fill" Stroke="#FF43B7FF" Fill="#FFFFFFFF" />
                        <Border Padding="15,45,15,15">
                            <Rectangle Fill="White" RadiusX="5" RadiusY="5" Stroke="#FFA19FA0" StrokeThickness="1" />
                        </Border>
                    </Grid>
                </Border>
            </ControlTemplate>
    现在的问题是,中间的mPath的Data属性,是一堆的曲线,这些曲线的各个点,是要根据Label.Width和Label.Height来决定的,这里经常要用到Label.Width - 5 这样的操作,这种操作在CS代码里做是毫无问题的,但是在XAML里,该要如何实现呢?
    附Data属性点设置代码
    StreamGeometry geometry = new StreamGeometry();
    geometry.FillRule = FillRule.Nonzero; //声前F0还是F1,现在是F1
    using (StreamGeometryContext ctx = geometry.Open())
    {
          ctx.BeginFigure(new Point(5, 0), true, true);
          ctx.LineTo(new Point(titlewidth, 0), true, false);
          ctx.BezierTo(new Point(titlewidth + 28, 0), new Point(titlewidth + 4, 27), new Point(titlewidth + 60, 27), true, false);
          ctx.LineTo(new Point(width, 27), true, false);
          ctx.BezierTo(new Point(width + 2.5, 27), new Point(width + 5, 29.5), new Point(width + 5, 32), true, false);
          ctx.LineTo(new Point(width + 5, height), true, false);
          ctx.BezierTo(new Point(width + 5, height + 2.5), new Point(width + 2.5, height + 5), new Point(width, height + 5), true, false);
          ctx.LineTo(new Point(5, height + 5), true, false);
          ctx.BezierTo(new Point(2.5, height + 5), new Point(0, height + 2.5), new Point(0, height), true, false);
          ctx.LineTo(new Point(0, 5), true, false);
          ctx.BezierTo(new Point(0, 2.5), new Point(2.5, 0), new Point(5, 0), true, false);
    }
    geometry.Freeze();

    • 已编辑 n10z 2009年7月25日 3:38 增加问题说明
    2009年7月25日 3:32

答案

全部回复