代码之家  ›  专栏  ›  技术社区  ›  dustyburwell

WPF中带VisualBrush的双边框

  •  0
  • dustyburwell  · 技术社区  · 14 年前

    我很好奇是否有人知道一种方法,可以很容易地在WPF中获得类似于您在windows7的Windows资源管理器中所选项目的双边框效果。

    Example of what I'm looking for

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

    然而,我很好奇是否有更好的方法来解决这个问题。

    我用VisualBrush作为背景玩了一段时间,试图获得效果。但是,我希望能够将背景应用于任何大小的元素,VisualBrush拉伸视觉以适应元素背景的方式并没有按我希望的方式工作。从本质上说,我真的希望它能像WPF布局系统那样扩展视觉效果。

    任何想法都将不胜感激。

    1 回复  |  直到 8 年前
        1
  •  1
  •   SergioL    14 年前

    在这个场景中,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>
    

    希望有帮助,

    塞尔焦

    推荐文章