Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 为什么MaterialDesignToolKit中按钮的自定义样式不';你没有内容演示者吗?_Wpf_Material Design_Controltemplate_Contentpresenter - Fatal编程技术网

Wpf 为什么MaterialDesignToolKit中按钮的自定义样式不';你没有内容演示者吗?

Wpf 为什么MaterialDesignToolKit中按钮的自定义样式不';你没有内容演示者吗?,wpf,material-design,controltemplate,contentpresenter,Wpf,Material Design,Controltemplate,Contentpresenter,我正在学习MaterialDesignToolKit(WPF)的源代码,现在主要关注连锁反应。我发现涟漪效应来自于按钮的自定义样式(如下所示)。但在Button的控件模板中,我看不到任何ContentPresenter。相反,这里有一个装饰器 正如我所知,按钮是ContentControl,若你们给它提供一个新的模板,你们应该把ContentPresenter放在某个地方。但在这里,它并没有 我不知道为什么,请帮帮我。谢谢 <Style x:Key="MaterialDesignRaise

我正在学习MaterialDesignToolKit(WPF)的源代码,现在主要关注连锁反应。我发现涟漪效应来自于按钮的自定义样式(如下所示)。但在Button的控件模板中,我看不到任何ContentPresenter。相反,这里有一个装饰器

正如我所知,按钮是ContentControl,若你们给它提供一个新的模板,你们应该把ContentPresenter放在某个地方。但在这里,它并没有

我不知道为什么,请帮帮我。谢谢

<Style x:Key="MaterialDesignRaisedButton" TargetType="{x:Type ButtonBase}">
    <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}" />
    <Setter Property="Background" Value="{DynamicResource PrimaryHueMidBrush}" />
    <Setter Property="BorderBrush" Value="{DynamicResource PrimaryHueMidBrush}" />
    <Setter Property="Foreground" Value="{DynamicResource PrimaryHueMidForegroundBrush}" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="White" />
    <Setter Property="Cursor" Value="Hand" />
    <Setter Property="wpf:ShadowAssist.ShadowDepth" Value="Depth1" />
    <Setter Property="TextBlock.FontWeight" Value="Medium" />
    <Setter Property="TextBlock.FontSize" Value="14" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="HorizontalContentAlignment" Value="Center" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="Padding" Value="16,4,16,4" />
    <Setter Property="Height" Value="32" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ButtonBase}">
                <Grid>
                    <AdornerDecorator CacheMode="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:ShadowAssist.CacheMode)}">
                        <Grid>
                            <Border
                                x:Name="border"
                                Background="{TemplateBinding Background}"
                                BorderBrush="{TemplateBinding BorderBrush}"
                                BorderThickness="{TemplateBinding BorderThickness}"
                                CornerRadius="2"
                                Effect="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ShadowAssist.ShadowDepth), Converter={x:Static converters:ShadowConverter.Instance}}" />
                            <Border
                                HorizontalAlignment="Left"
                                Background="{DynamicResource MaterialDesignBackground}"
                                Opacity=".4">
                                <Border.Width>
                                    <MultiBinding Converter="{StaticResource RangeLengthConverter}">
                                        <Binding Path="(wpf:ButtonProgressAssist.Minimum)" RelativeSource="{RelativeSource TemplatedParent}" />
                                        <Binding Path="(wpf:ButtonProgressAssist.Maximum)" RelativeSource="{RelativeSource TemplatedParent}" />
                                        <Binding Path="(wpf:ButtonProgressAssist.Value)" RelativeSource="{RelativeSource TemplatedParent}" />
                                        <Binding Path="ActualWidth" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type ButtonBase}}" />
                                    </MultiBinding>
                                </Border.Width>
                            </Border>
                        </Grid>
                    </AdornerDecorator>
                    <wpf:Ripple
                        Padding="{TemplateBinding Padding}"
                        HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                        VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                        Content="{TemplateBinding Content}"
                        ContentTemplate="{TemplateBinding ContentTemplate}"
                        Focusable="False"
                        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter TargetName="border" Property="wpf:ShadowAssist.Darken" Value="True" />
                    </Trigger>
                    <Trigger Property="IsKeyboardFocused" Value="true">
                        <Setter TargetName="border" Property="wpf:ShadowAssist.Darken" Value="True" />
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Opacity" Value="0.23" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

您不必在模板中包含ContentPresenter。。。您只需要提供一种显示内容的方法。内容演示者只是实现这一点的一种方法

在本例中,模板的content属性绑定到wpf:Ripple控件,该控件反过来表示内容


本质上,此控件模板将显示内容的责任传递给另一个控件。

如果该模板不打算显示
按钮的
内容,则不需要
内容演示器。