未在WPF的资源字典中更新RenderTransform

未在WPF的资源字典中更新RenderTransform,wpf,xaml,Wpf,Xaml,我想在资源字典中实现一个旋钮,它可以接收图像作为模板。 当我在同一个库中实现它时,它运行良好: knob.xaml: <UserControl x:Class="SwitchesLibrary.Knob" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="96" Width="96"

我想在资源字典中实现一个旋钮,它可以接收图像作为模板。 当我在同一个库中实现它时,它运行良好:

knob.xaml:

<UserControl x:Class="SwitchesLibrary.Knob"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="96" Width="96" x:Name="This">
<Grid>
    <Image RenderTransformOrigin=".5,.5" Source="Images/Knobs/Knob.png" Height="96" Width="96" >
        <Image.RenderTransform>
            <RotateTransform Angle="{Binding Angle, ElementName=This}"/>
        </Image.RenderTransform>
    </Image>
</Grid>
但当我将其移动到资源字典时:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:local="clr-namespace:SwitchesLibrary">
<Style TargetType="local:Knob">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:Knob">
                <Border BorderBrush="{TemplateBinding BorderBrush}"
                BorderThickness="{TemplateBinding BorderThickness}">
                    <Grid>
                        <Image 
                            x:Name="image"
                            Source="{TemplateBinding KnobImage}"
                            RenderTransformOrigin=".5,.5" 
                            Stretch="Fill"
                            HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                            VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
                            <Image.RenderTransform>
                                <RotateTransform Angle="{TemplateBinding Angle}"/>
                            </Image.RenderTransform>
                        </Image>
                        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                            VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>


它似乎工作正常(角度值已正确更新),但旋钮图像未旋转。为什么?

尝试将
模板绑定
替换为
相对资源
绑定

<RotateTransform Angle="{Binding Angle, RelativeSource={RelativeSource AncestorType=local:Know}, Mode=OneWay}"/>


{TemplateBinding}
是绑定的优化版本,但并非在所有情况下都能很好地工作。

尝试将
TemplateBinding
替换为
相对资源
绑定

<RotateTransform Angle="{Binding Angle, RelativeSource={RelativeSource AncestorType=local:Know}, Mode=OneWay}"/>


{TemplateBinding}
是绑定的优化版本,但并非在所有情况下都能很好地工作。

在某些情况下,即使是
{RelativeSource TemplatedParent}
也能工作,而
TemplateBinding
则不能(例如在setter中),即使一个基本上是另一个的缩写。但不确定它在这里是否有效。在某些情况下,即使是
{relativesourcetemplatedparent}
也可以工作,而
TemplateBinding
则不能(例如,在setter中),即使一个基本上是另一个的缩写。不过,我不确定它在这里是否管用。