2016-10-10 10 views
0

私は、ボタンの高さの半分にWPFボタンのコーナー半径を動的に設定して、両端が丸くなるようにしています。WPF Button ControlTemplate HeightバインディングがNaNを返す

Windowリソースのエントリは次のようになりますが、CornerRadiusバインディングはバインドされず、NaNをバリューコンバータに渡します。

BindingTemplateBindingに置き換えようとしましたが、役に立たなくなりました。スヌープは、の値をNaNと設定しているので、CornerRadiusのプロパティにエラーが表示されます。私はここで何かを見逃していますか?

<Style TargetType="Button"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <Grid x:Name="grid"> 
        <Border x:Name="border" BorderBrush="#FFFEFEFF" BorderThickness="2" CornerRadius="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Height,Converter={StaticResource HalfConverter}}"> 
         <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"></ContentPresenter> 
... 
+0

ActualHeightにバインドする代わりの高​​さ。 – Clemens

+0

@クレメンスああ!それは簡単だった。私は自分自身から遠く離れていないと思って、他のプロパティを探し、 'RenderSize'を見つけました。それを回答として投稿すると、私は感謝の意をもってそれを受け入れます。 – Dan

答えて

2

代わりのコントロールのHeight(それが明示的に設定されていない限り、Double.NaNである)に結合し、あなたはそのActualHeightプロパティにバインドする必要があります。

CornerRadius="{Binding Path=ActualHeight, 
         RelativeSource={RelativeSource TemplatedParent}, 
         Converter={StaticResource HalfConverter}}"> 
+0

非常に高く評価され、簡潔な答えです。 – Dan

関連する問題