0

Tag プロパティを Binding のソースとして使用しようとしていますが、コンバーターに到達すると値が 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のセッターを追加しましたが、それはコンバーターへの2回目の呼び出しの後にのみ機能します(マウスオーバーによってトリガーされます)。

最初のパスでバインドが機能しない理由がわかりますか?

Tag 以外に、より確実に使用できる場所はありますか?

2回目の更新

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 に答える