WPF自定义按钮大小内容路径

时间:2012-07-17 13:06:35

标签: wpf custom-controls controltemplate sizetocontent

这是我的自定义按钮模板:

<Button.Template>
    <ControlTemplate TargetType="{x:Type Button}">
        <Grid>
            <Path x:Name="Inner" Stretch="Fill" Fill="{TemplateBinding Background}" Data="F1 M 249.989,59.8321L 399.989,59.8321L 429.989,88.1654L 399.989,120.165L 249.989,120.165L 279.989,88.1654L 249.989,59.8321 Z ">
                <Path.Effect>
                    <DropShadowEffect BlurRadius="10" Opacity="0.5" ShadowDepth="4" />
                </Path.Effect>
            </Path>
            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
            <Path x:Name="Border" Stretch="Fill" Stroke="{TemplateBinding BorderBrush}" Data="F1 M 249.989,59.8321L 399.989,59.8321L 429.989,88.1654L 399.989,120.165L 249.989,120.165L 279.989,88.1654L 249.989,59.8321 Z " />
        </Grid>
    </ControlTemplate>
</Button.Template>

以下是它的显示方式:

enter image description here

我希望它能够确定2个路径的大小,使其适合内容。这是面包屑自定义控件的一部分,我希望每个面包屑只占用所需的空间。我无法弄清楚如何让Path的大小适合ContentPresenter。

我尝试将路径的宽度和高度绑定到ContentPresenters的宽度和高度,但没有骰子:/

请注意,在上图中,文本符合Path的宽度和高度,但是,当我添加文本或从ContentPresenter中删除文本时,它不会调整大小。

1 个答案:

答案 0 :(得分:2)

我建议将Path属性绑定到ContentPresenter的ActualWidth / ActualHeight,使用Converter来计算Path.Data

由于需要两个属性(高度和宽度),您需要IMultiValueConverter,或者您需要将整个ContentPresenter传递到绑定中,如下所示:

Path Data="{Binding ElementName=MyContentPresenter, 
                    Converter={StaticResource Path1Converter}}" />

此外,不要忘记您可以在Path.Data中使用小写字母来指定相对点,而不必总是使用绝对点。