2010-03-12 91 views
0
一个VisualBrush

我很好奇,如果任何人的方式轻松获得在WPF类似于您在Windows资源管理器所选的项目在Windows 7双边框与WPF

Example of what I'm looking for看到双重边框效果都知道

如果仔细观察,您会注意到所选项目具有黑色边框,较亮的内边框以及渐变背景。

目前,我使用任何时候我想要达到这种效果的对象周围的两个边框。这样做是丑陋的语法和真正muddies我的看法xaml。作为一名web开发人员,我希望尽可能将xaml结构从样式中分离出来。所以,我已经开始将它放入样式和内容模板中,以便将其从我的视图xaml中取出。

但是,我很好奇,如果可能有更好的方法去做这件事。

我玩了一段时间,用VisualBrush作为背景来尝试获得效果。但是,我希望能够将背景应用于可以具有任意大小的元素,并且VisualBrush将视觉拉伸以适应元素背景的方式无法按照我希望的方式工作。从本质上讲,我真的很喜欢它以WPF布局系统的方式来扩展视觉效果。

任何想法将不胜感激。

- 尘埃

+0

如果该地区有两个嵌套的边界画,什么是丑有关语法这么说?如果你使用模板来生成它,什么会变得模糊?我不明白。 – 2010-03-12 19:06:33

+0

丑陋的原因在于语义上,边界和背景毫无意义。如果我想从现在起6个月更改我应用的“皮肤”,我不希望找到所有放置这些边框的位置,以便我可以更改它们。 我同意使用模板生成它更好,我只是好奇,如果有可能以这种方式使用VisualBrush。 – dustyburwell 2010-03-13 18:01:17

回答

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> 

你可以,当然,调整的属性来获取你需要的样子。

编辑:如果你想创建一种风格,所以你可以reskin的外观和感觉,你可以做这样的事情:

<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> 

另外,变成一个自定义的控制这一切的样式和主题参数,您需要。

希望帮助,

塞尔吉奥

+0

虽然不是我正在寻找的东西,但您的建议很有用。我想使用VisualBrush可能不是所有的表现。 – dustyburwell 2010-03-15 18:16:15

+0

我不认为你会因为拉伸因素而使VisualBrush看起来完全如何。按比例放大以填充元素时,“假”边框也会放大,因此内部不会有1像素的白色边框。样式和主题(也可能是自定义控件)是消除冗余和混乱的方法。 – SergioL 2010-03-16 21:30:50

+0

我很感谢SergioL的建议。我没有真正考虑它,但这正是很多标准ControlTemplates所做的。例如,Button在Luna和Aero中使用ButtonChrome作为边框。感谢你在那个上慢跑我的大脑。 – dustyburwell 2010-03-19 13:25:46