9

次の ControlTemplate の Ellipse は BorderThickness を取得していないように見えますが、なぜですか?

<Window.Resources>
    <ControlTemplate x:Key="EllipseControlTemplate" TargetType="{x:Type TextBox}">
        <Grid>
            <Ellipse 
                Width="{TemplateBinding ActualWidth}" 
                Height="{TemplateBinding ActualHeight}" 
                Stroke="{TemplateBinding Foreground}" 
                StrokeThickness="{TemplateBinding BorderThickness}" />
                <ScrollViewer Margin="0" x:Name="PART_ContentHost" HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Grid>
    </ControlTemplate>
</Window.Resources>
<Grid>
    <TextBox
        Template="{DynamicResource EllipseControlTemplate}" 
        Foreground="Green"
        BorderThickness="15" />
</Grid>

TemplateBindingForegroundは正常に機能します。楕円は緑色です。しかし、StrokeThicknessうまくいかないようです、なぜですか?

4

4 に答える 4

16

別の可能な解決策...(IValueConvertersを最後の手段としてのみ使用したいため、EllipseのDataContextを変更する必要がある場合は、他のものに設定する必要がある場合は機能しない可能性があるため):

<Ellipse StrokeThickness="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=BorderThickness.Top}" />

これは元の意図 (TemplatedParent にバインドする) と同等ですが、ロングハンド マークアップを使用すると、単なるプロパティではなくパスを指定できます。

于 2012-10-09T19:12:46.033 に答える
7

BorderThicknessはそれほど簡単ではありません。それは型の構造体ですThickness(また、 のように合成することもできますBorderThickness=".0,.0,2,2") が、StrokeThicknessプロパティは型doubleです。

IValueConverterこのバインディングを機能させる必要があります。

于 2009-11-26T14:35:27.407 に答える
1

Ellipse の DataContext プロパティを使用することもできます。

<Ellipse DataContext="{TemplateBinding BorderThickness}" StrokeThickness="{Binding Top}" />

お役に立てれば!

于 2012-06-14T19:22:10.423 に答える
1

ネーミングの落とし穴がありました: BorderThicknessis type of Thickness、およびStrokeThicknessis type of double. が必要IValueConverterです。

于 2009-11-26T14:41:15.507 に答える