0

我很好奇是否有人知道一种在 WPF 中轻松获得双边框效果的方法,类似于您在 Windows 7 的 Windows 资源管理器中的选定项目中看到的效果。

我正在寻找的示例

如果仔细观察,您会注意到所选项目有一个深色边框、一个较浅的内边框,然后是渐变背景。

目前,只要我想达到这种效果,我就在一个对象周围使用两个边框。这样做在语法上很丑陋,并且真的使我对 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 回答