设置父样式WPF中特性值的值

设置父样式WPF中特性值的值,wpf,xaml,mvvm,Wpf,Xaml,Mvvm,对于自定义控件,我有以下WPF样式 <Style TargetType="{x:Type local:TransportControl}"> <Setter Property="MinorTickBrush" Value="{DynamicResource BlackBrush}"/> <Setter Property="MajorTickBrush" Value="{DynamicResource BlackBrush}"/> <

对于自定义控件,我有以下WPF样式

<Style TargetType="{x:Type local:TransportControl}">
    <Setter Property="MinorTickBrush" Value="{DynamicResource BlackBrush}"/>
    <Setter Property="MajorTickBrush" Value="{DynamicResource BlackBrush}"/>
    <Setter Property="IndicatorBrush" Value="{DynamicResource BlckBrush}"/>
    <Setter Property="ProgressBorderBrush" Value="{DynamicResource BlackBrush}"/>
    <Setter Property="ProgressBrush" Value="{DynamicResource HighlightBrush}"/>
    <Setter Property="IndicatorSize" Value="16"/>
    <Setter Property="IndicatorBrush" Value="{DynamicResource BlackBrush}"/>
    <Setter Property="IndicatorGlow" Value="True"/>
    <Setter Property="IndicatorGlowBrush" Value="GhostWhite"/>
    <Setter Property="FontFamily" Value="Segoe UI"/>

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:TransportControl}">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        Padding="{Binding Path=DataContext.IndicatorSize, 
                            RelativeSource={RelativeSource AncestorType={x:Type local:TransportControl}}, 
                            Converter={StaticResource ValueToHorizontalPaddingConverter}}"
                        Margin="4,2">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="20"/>
                            <RowDefinition Height="*"/>
                        </Grid.RowDefinitions>
                        <Canvas Name="PART_TimelineCanvas" Grid.Row="0" Height="20" ClipToBounds="False"/>
                        <Canvas Name="PART_ProgressCanvas" Grid.Row="1" ClipToBounds="False"/>
                        <Canvas Name="PART_IndicatorCanvas" 
                                  Grid.Row="0" 
                                  Grid.RowSpan="2" 
                                  ClipToBounds="False" 
                                  Panel.ZIndex="2"/>
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
我正在尝试设置控件的填充,以便指示器可以正确居中。我希望控件的填充是父样式中指示符集的一半。目前,我只是想让它成为指示符,但是我尝试的绑定并没有像预期的那样工作

Padding="{Binding Path=DataContext.IndicatorSize, 
    RelativeSource={RelativeSource AncestorType={x:Type local:TransportControl}}, 
    Converter={StaticResource ValueToHorizontalPaddingConverter}}" 
我做错了什么


谢谢你抽出时间

您可以使用TemplateBinding来执行以下操作:

Padding="{TemplateBinding IndicatorSize, Converter={StaticResource ValueToHorizontalPaddingConverter}}"
指示器居中的另一种方法是给边框一个名称,在自定义控件的OnApplyTemplate中获取对它的引用。。方法,并在IndicatorSize属性更改时用C设置其填充。这样您就不需要绑定和转换器

Padding="{TemplateBinding IndicatorSize, Converter={StaticResource ValueToHorizontalPaddingConverter}}"