0

Windows7のWindowsエクスプローラーで選択したアイテムに表示されるものと同様の二重境界線効果をWPFで簡単に取得する方法を誰かが知っているかどうか知りたいです。

私が探しているものの例

よく見ると、選択したアイテムの境界線が暗く、境界線が明るく、背景がグラデーションになっていることがわかります。

現在、この効果を実現したいときはいつでも、オブジェクトの周囲に2つの境界線を使用しています。そのようにすることは構文的に醜く、私の見解xamlを本当に混乱させます。Web開発者である私は、xaml構造をスタイルから可能な限り分離したいと考えています。そこで、ビューxamlから取得するために、これをスタイルとコンテンツテンプレートに入れ始めました。

しかし、これについてもっと良い方法があるのではないかと思います。

効果を得るために、背景としてVisualBrushを使用してしばらく遊んでいました。ただし、任意のサイズの要素に背景を適用できるようにしたいので、VisualBrushが要素の背景に合わせてビジュアルを引き伸ばす方法が、希望どおりに機能しませんでした。基本的に、WPFレイアウトシステムと同じようにビジュアルを拡大したいと思います。

任意のアイデアをいただければ幸いです。

-ほこりっぽい

4

1 に答える 1

1

VisualBrushはかなり重いため、このシナリオで実行したいことではない可能性があります。

境界線をネストせずに、一部のXamlで問題を解決できます。

例えば、

<Border BorderBrush="#FF00B5C5" BorderThickness="1" CornerRadius="2" Background="White">
   <Grid Background="#FF00B5C5" Margin="1">
     <Rectangle Fill="#FFA2F2FE" />
     <TextBlock Text="This is some text" VerticalAlignment="Center"/>
   </Grid>
</Border>

もちろん、プロパティを微調整して必要な外観にすることもできます。

編集:スタイルを作成して、ルックアンドフィールのスキンを変更できるようにする場合は、次のようにすることができます。

<Window.Resources>
    <Style x:Key="BorderedTextBlock" TargetType="ContentControl">
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <Border BorderBrush="#FF00B5C5" BorderThickness="1" CornerRadius="2" Background="White"> 
                       <Grid Background="#FF00B5C5" Margin="1"> 
                         <Rectangle Fill="#FFA2F2FE" /> 
                         <TextBlock Text="{Binding}" VerticalAlignment="Center"/> 
                       </Grid> 
                    </Border>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

<Grid x:Name="LayoutRoot">
    <ContentControl Style="{StaticResource BorderedTextBlock}" Content="This is some text" Width="200" Height="24"/>
</Grid>

さらに、これを必要なすべてのスタイリングとテーマ設定パラメーターを備えたカスタムコントロールに変換します。

お役に立てば幸いです。

セルジオ

于 2010-03-12T15:41:52.600 に答える