カスタム AttachedProperty の Value を ToolTip のコンテンツにバインドしたいと考えています。
バインドは機能しますが、ToolTip を 2 回目に開いたときにのみ機能します。ツールチップが初めて開かれるとき、バインディングには FallbackValue があります。
不思議なことに、Grid.Row などの「デフォルト」の AttachedProperties で動作します。
誰もそれを説明できますか?
コードは非常に単純です。
<Button local:AttachedProperty.TestProperty="Now it works!" Content="Button">
<Button.ToolTip>
<ToolTip DataContext="{Binding Path=PlacementTarget, RelativeSource={x:Static RelativeSource.Self}}">
<TextBlock Text="{Binding (local:AttachedProperty.TestProperty), FallbackValue="It doesn't work"}" />
</ToolTip>
</Button.ToolTip>
</Button>
AttachedProperty のコード:
public static class AttachedProperty
{
public static readonly DependencyProperty TestPropertyProperty = DependencyProperty.RegisterAttached
(
"TestProperty",
typeof(string),
typeof(AttachedProperty),
new FrameworkPropertyMetadata
(
string.Empty,
FrameworkPropertyMetadataOptions.Inherits
)
);
public static string GetTestProperty(FrameworkElement target)
{
return (string)target.GetValue(TestPropertyProperty);
}
public static void SetTestProperty(FrameworkElement target, string value)
{
target.SetValue(TestPropertyProperty, value);
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
EDIT 1: 解決策と新しい問題:
ツールチップ内で名前空間「ローカル」を再度定義すると、機能することがわかりました。
<ToolTip xmlns:local="clr-namespace:Test" DataContext=...
しかし
スタイル内でこれを行いたい場合は、エラーが発生します
"XMLNamespace", "Assembly" or "ClrNamespace" not found in Mapping Expression
新しいテスト プロジェクトの XML コードは次のとおりです。
<Grid x:Name="LayoutRoot">
<Grid.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="ToolTip">
<Setter.Value>
<ToolTip xmlns:local="clr-namespace:Test" DataContext="{Binding Path=PlacementTarget, RelativeSource={x:Static RelativeSource.Self}}" >
<TextBlock Text="{Binding (local:AttachedProperty.TestProperty), FallbackValue="It doesn't work"}" />
</ToolTip>
</Setter.Value>
</Setter>
</Style>
</Grid.Resources>
<Button local:AttachedProperty.TestProperty="Now it works!" Content="Button" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>