0

我正在尝试使用 Tag 属性作为绑定的源,但是当它到达转换器时该值为 null。

我究竟做错了什么?

消费者

<Button Style="{StaticResource AddNewItemButtonStyle}" Tag="blah" />

捆绑

<Style x:Key="AddNewItemButtonStyle" BasedOn="{StaticResource blueButtonStyle}" 
       TargetType="{x:Type Button}">
    ...             
    <AccessText Text="{Binding RelativeSource={RelativeSource Self}, 
                Path=Tag, Converter={StaticResource AddNewItemForLabel}}">
</Style>

更新

我使用相同的策略为 ToolTip 添加了一个设置器,并且仅在第二次调用转换器(通过鼠标悬停触发)之后才起作用。

你能明白为什么绑定在第一次通过时不起作用吗?

除了我可以更可靠地使用的标签之外,还有其他地方吗?

第二次更新

根据 Phil 的输入,我将样式更改为下面的 xaml。我必须向样式添加模板属性吗?

<Style x:Key="AddNewItemButtonStyle" BasedOn="{StaticResource blueButtonStyle}" TargetType="{x:Type Button}">
    <Setter Property="resx:ResxExtension.DefaultResxName" Value="Smack.Core.Presentation.Resources.MasterDetail"/>
    <Setter Property="Content" >
        <Setter.Value>
            <StackPanel Orientation="Horizontal">
                <Image Source="{resx:Resx ResxName=Smack.Core.Presentation.Resources.MasterDetail, Key=bullet_add}" Stretch="Uniform" />
                <AccessText VerticalAlignment="Center" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Tag, Converter={StaticResource AddNewItemForLabel}}" />
                <ContentPresenter/>
            </StackPanel>
        </Setter.Value>
    </Setter>
    <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Tag, Converter={StaticResource AddNewItemForToolTip}}"/>
    <Setter Property="Command" Value="{Binding AddNewItemCommand}" />
</Style>
4

1 回答 1

0

如果您更改我给您的其他问题的答案中的 xaml

<AccessText Grid.Column="1" VerticalAlignment="Center">
    <AccessText.Text>
        <MultiBinding StringFormat="{}_{0} {1}">
            <Binding Source="{StaticResource Test}"/>
            <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Tag"/>
        </MultiBinding>
    </AccessText.Text>
</AccessText>

然后标签将起作用。

或者您可以使用 TemplateBinding 的缩写形式

<AccessText Grid.Column="1" VerticalAlignment="Center" Text="{TemplateBinding Tag}"/>

或长格式

<AccessText Grid.Column="1" VerticalAlignment="Center" 
    Text="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Tag}"/>

或者,您的样式将像这样工作(为测试而删除的位):

<Style x:Key="AddNewItemButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="Content" >
        <Setter.Value>
            <StackPanel Orientation="Horizontal">
                <AccessText VerticalAlignment="Center" 
                            Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=Tag}" />
                <ContentPresenter/>
            </StackPanel>
        </Setter.Value>
    </Setter>
    <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Tag}"/>
</Style>
于 2012-04-27T16:40:09.617 回答