WPF,更改ControlTemplate内元素的样式

WPF,更改ControlTemplate内元素的样式,wpf,xaml,Wpf,Xaml,我想知道WPF是否提供了一种方法,可以将ControlTemplate中定义的命名元素的样式从其他地方声明的样式更改为其他样式,如下面的示例所示 让我们使用名为«MyTextBlock»的文本块重新定义标签的ControlTemplate 让我们继承以前定义的标签的样式 问候 我想知道WPF是否提供了一种方法来更改ControlTemplate中定义的命名元素的样式,而不是其他地方声明的样式 简短回答:没有 您不能直接访问或设置元素(TextBlock)的属性,但可以设置绑定到模板中元素

我想知道WPF是否提供了一种方法,可以将ControlTemplate中定义的命名元素的样式从其他地方声明的样式更改为其他样式,如下面的示例所示

  • 让我们使用名为«MyTextBlock»的文本块重新定义标签的ControlTemplate
  • 
    
  • 让我们继承以前定义的标签的样式
  • 
    
    问候

    我想知道WPF是否提供了一种方法来更改ControlTemplate中定义的命名元素的样式,而不是其他地方声明的样式

    简短回答:没有

    您不能直接访问或设置元素(
    TextBlock
    )的属性,但可以设置绑定到模板中元素的样式控件(
    Label
    )的属性,例如:

    <Style x:Key="MyLabel" TargetType="Label">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <TextBlock x:Name="MyTextBlock" Foreground="{TemplateBinding Foreground}" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    
    <Style x:Key="MyNewLabel" TargetType="Label" BasedOn="{StaticResource MyLabel}">
        <Setter Property="Foreground" Value="Red" />
    </Style>
    
    
    
    谢谢mm8。根据我的实际需要,样式不依赖于现有属性,如我在示例中使用的前台属性。。。我知道我还可以添加一些额外的依赖属性,但我的问题是是否有可能覆盖某些命名部件的样式。因此,我可能会接受你的简短回答。是的,恐怕你无法覆盖某些命名部件的样式。
    <Style x:Key="MyNewLabel" BasedOn="{StaticResource MyLabel}">
        <Setter Property="{Binding {[SOME.EXPRESSION.TO.REACH.MyTextBlock???]}, Path=Foreground}" Value="Red" />
    </Style>
    
    <Style x:Key="MyLabel" TargetType="Label">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <TextBlock x:Name="MyTextBlock" Foreground="{TemplateBinding Foreground}" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    
    <Style x:Key="MyNewLabel" TargetType="Label" BasedOn="{StaticResource MyLabel}">
        <Setter Property="Foreground" Value="Red" />
    </Style>