2

半透明の丸みを帯びた背景を持つカスタムコントロールを作成しようとしました。

<Canvas>
    <TextBlock x:Name="StopText" Text="Some test text"/>
    <Rectangle Fill="SkyBlue"
               Width="{Binding Source=StopText, Path=ActualHeight}" 
               Height="20"  
               RadiusX="5" RadiusY="5" Opacity="0.2"/>
</Canvas>

問題は、おそらく/プロパティにバインドできないことです。これは、ActualHeight/ActualWidthプロパティが依存関係ではないためです。

同じサイズの長方形とテキストボックスを維持するにはどうすればよいですか?

4

1 に答える 1

10

正しいバインディングは、別の要素にバインドするときにElementName、ではなくを使用することです。Source

<Canvas>
    <TextBlock x:Name="StopText" Text="Some test text"/>
    <Rectangle Fill="SkyBlue"
               Width="{Binding ElementName=StopText, Path=ActualHeight}" 
               Height="20"  
               RadiusX="5" RadiusY="5" Opacity="0.2"/>
</Canvas>

また、あなたはあなたがの幅をのにバインドしていることに気づいていますRectangleHeightTextBlock

これが本当にコントロールを設定したい方法である場合は、Rectangle'sWidthをTextBlock'sActualWidthおよびHeightにバインドする必要がありますActualHeight

UPDATE 以下のコメントによると、Gridこれはバインディングなしのを使用した実装です。

<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
    <TextBlock x:Name="StopText" Text="Some test text"/>
    <Rectangle Fill="SkyBlue"
               HorizontalAlignment="Stretch"
               VerticalAlignment="Stretch"  
               RadiusX="5" RadiusY="5" Opacity="0.2"/>
</Grid>

GridCanvas さまざまなレイアウトシステムを使用します。Canvas提供する機能を使用していないためGrid、より適切な選択です。

子要素の大きな違いは、サイズを気にすることなく、Rectangle水平方向と全体をVerticalAlignment使用するようになったことです。StretchGrid

于 2010-09-24T13:17:35.370 に答える