2017-06-30 14 views
1

UWPでは、ツールチップのデフォルトテンプレートを変更しようとしています。c#uwpテンプレートバインディングと依存関係のプロパティ

私はそれを管理しましたが、今は、それが属しているコントロールを指摘するためにツールチップの矢印を設定する必要があります。

<Style TargetType="ToolTip"> 
     <Setter Property="Foreground" Value="White" /> 
     <Setter Property="Background" Value="{ThemeResource SystemControlBackgroundChromeMediumLowBrush}" /> 
     <Setter Property="BorderBrush" Value="{ThemeResource SystemControlForegroundChromeHighBrush}" /> 
     <Setter Property="BorderThickness" Value="{ThemeResource ToolTipBorderThemeThickness}" /> 
     <Setter Property="FontFamily" Value="Roboto" /> 
     <Setter Property="FontSize" Value="{ThemeResource ToolTipContentThemeFontSize}" /> 
     <Setter Property="Padding" Value="40,40,40,35"/> 

     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ToolTip"> 

        <Grid Background="Transparent"> 

         <Grid 
          MinWidth="100" 
          MinHeight="90" 
          Height="{TemplateBinding Height}" 
          Width="{TemplateBinding Width}" 
          Padding="15" 
          Background="Transparent"> 

そしてそうにして上を...しかし、今、私はTemplateBindingのプロパティを持つユーザーコントロールのバインドを作成しようとしています:

私のスタイルは、このように定義されます。

いくつかのdependecncyプロパティを持つUserControlを作成しました。このよう :

public PlacementMode TooltipPlacement 
    { 
     get { return (PlacementMode)GetValue(TooltipPlacementProperty); } 
     set { SetValue(TooltipPlacementProperty, value); CalculateArrowVisibility(); } 
    } 

    public static readonly DependencyProperty TooltipPlacementProperty = 
     DependencyProperty.Register("TooltipPlacement", typeof(PlacementMode), typeof(ArrowDown), null); 

CalculateArrowVisibilityは()TooltipPlacementに応じて矢印の位置を計算する方法です。

そして、その制御は、このように定義スタイルである:

<local:ArrowDown x:Name="arrow" TooltipPlacement="{TemplateBinding Placement}"/> 

しかし、それがバインドされていない、私はまた、他のTemplatePropertiesが、運を試してみました。

ここで問題はありますか?

+0

'' TooltipPlacement = "{TemplateBindingの内容}" 'でContent'は何ですか? –

+0

コピーペースト中に間違いがあります: <ローカル:ArrowDown x:Name = "arrow" TooltipPlacement = "{TemplateBinding Placement}" /> – user3239349

+0

'set {SetValue (TooltipPlacementProperty、value); SetValue(); } '?他の操作を行うために関数のオーバーロードですか? –

答えて

1

あなたは依存関係プロパティが間違っているかのようにあなたは非常に近いです。

getterとsetterを決して変更しないでください。代わりに、そのプロパティ内のあなたのCalculateArrowVisibility方法は次のようにコールバックを変え呼び出す -

public PlacementMode TooltipPlacement 
{ 
    get => (PlacementMode)GetValue(TooltipPlacementProperty); 
    set => SetValue(TooltipPlacementProperty, value); 
} 
public static readonly DependencyProperty TooltipPlacementProperty = 
    DependencyProperty.Register("TooltipPlacement", typeof(PlacementMode), typeof(ArrowDown), 
     new PropertyMetadata(null, TooltipPlacementChangedCallback)); 

private static void TooltipPlacementChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    var self = (ArrowDown)d; 
    self.CalculateArrowVisibility(); 
} 
+0

しかし、とにかくバインディング部分は実行されません。私はチェックするために改行ポイントを入れました、そして運はありません。 – user3239349

+0

@ user3239349あなたは他のどこかで何か間違ったことをしているに違いありません。私はそれがうまく動作したとあなたがどのように記述したかのように、プロジェクトを作成しましたより多くのコードで質問を編集するか、私にレポを提供してテストすることができます。 –

+0

依存関係のプロパティを編集することで、現在作業中です。 Thanx、それは私のコードの唯一の問題でした。 – user3239349

関連する問題