我想创建一个看起来像粘贴在窗口左侧的标签寄存器的按钮。
我想出了第一次尝试:
<Style x:Key="ButtonStyle" TargetType="Button">
<Setter Property="Background" Value="Gray" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<Path Fill="{TemplateBinding Background}" Data="M 0,0 C 0,25 50,25 50,50 V 150 C 50,175 0,175 0,200 Z" />
<ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这是使用此样式的按钮:
<Button VerticalAlignment="Center" Style="{StaticResource ButtonStyle}">
<TextBlock Text="Content">
<TextBlock.LayoutTransform>
<RotateTransform Angle="90" />
</TextBlock.LayoutTransform>
</TextBlock>
</Button>
但是第一次尝试的大小是一种修复(取决于我在Data
对象的Path
属性中使用的修复值。)我想使用“真实”按钮内容的大小,作为Data
对象的Path
属性的度量。
我知道我必须将以前使用的路径标记更改为代表实际路径图形的“真实”对象,然后我猜我必须在正确的位置使用某种TemplateBinding
。但是,我必须从何处获取模板绑定的值?那个告诉我内容的实际大小吗?
答案 0 :(得分:0)
经过反复试验,我找到了一种方法。
由于没有可以绑定的ActualSize
属性,并且由于RenderSize
不起作用,我不得不使用MultiBinding
绑定到ActualWidth
和{{1} }。
并且由于一个人只能绑定到ActualHeight
的{{1}},而不能仅绑定到属性Point1
,因此我必须在{ {1}}来计算BezierSegment
的所有点以适合X
的{{1}}和IMultiValueConverter
。