在ControlTemplate之外是否有类似于TemplateBinding的东西?

时间:2013-06-23 20:22:00

标签: c# wpf xaml binding attached-properties

我是WPF样式部分的新手。我想要做的是在setter中获取附加属性的值,例如:

<Trigger Property="SomeProperty" Value="SomeValue">
    <Setter Property="SomeProperty"
            Value="(My attached property, let's say lcl:MyClass.MyString)"/>
</Trigger>

我知道您可以使用{TemplateBinding lcl:MyClass.MyString}中的ControlTemplate获得相应的效果。我的问题是:您是否可以在不使用ControlTemplate的情况下以风格执行此操作?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用:

<Setter Property="SomeProperty" Value="{Binding Path=(lcl:MyClass.MyString), RelativeSource={RelativeSource self}}"/>

如果附加属性适用于元素作为您的样式。如果没有,您可以使用RelativeSource或ElementName来查找相应的元素。

我不确定你是怎么做到的,因为你的代码缺乏细节。下面的代码有效:

<UserControl.Resources>
    <Style x:Key="LabelStyle" TargetType="{x:Type Label}">
        <Style.Triggers>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Content" 
                Value="{Binding Path=(TestWebBrowser:AttachP.ValueEditorState), RelativeSource={RelativeSource self}}"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>

<StackPanel>
    <Label x:Name="label" TestWebBrowser:AttachP.ValueEditorState="HelloWorld"  Style="{StaticResource LabelStyle}"/>
    <Button Content="Disable Label" Click="Button_Click"/>
</StackPanel>

Button的click事件处理程序将Label的IsEnabled设置为false以触发触发器。请注意,您必须在绑定中使用Path = with括号。