2012-01-09 78 views
0

我想在某些DataGrid s中添加一些樣式。DataGrid樣式 - 在背景中添加可視圖案

我目前的工作旨在表明金融海量數據的應用程序有許多可視化工具(數字矩陣)來檢測好的數據,錯誤的數據...如果需要糾正他們,他們比較目標值

現在,我有一個彩色代碼基本上是:

  • 白色背景:當前值是罰款
  • 紅色背景:當前值與目標值下!
  • 綠色背景:當前值高於目標值!

我玩透明度設置背景清晰,如果有點接近良好的價值,否則強。

現在我想添加另一個可視化工具:某種形式的視覺模式,通知用戶這個值雖然是正確或錯誤的,但存在潛在的風險(正如我之前說的那樣,它是財務數據,所以它主要是衡量貨幣損失風險)。

目前的應用,在VBA編程,使用技巧,增加了一個空的註釋細胞所以紅色小三角形將出現在角落。

我想找到一種方法將它添加到我的XAML的風格,我想出的最好的事情就是添加視覺模式。

這裏是我想要達到一個例子:

Grid example

在左側欄中,你可以看到「正常顯示」。 在正確的方面,我添加了「危險風格」,這應該是「警告,這個值有問題」。 第一行顯示在Excel上執行此操作的舊方式:使用虛假評論,在右上角添加一個紅色三角形。

你有什麼想法如何實現這一目標? Adorner會訣竅嗎?

順便說一句,網格是可編輯的,所以我顯然不希望失去的編輯方面,這樣就使得我的可能Adorner疑問...

這是當前XAML Style,這是應用爲CellStyle

<Style x:Key="DynamicCellStyle" TargetType="{x:Type DataGridCell}"> 
    <Style.Triggers> 
     <Trigger Property="IsSelected" Value="True"> 
      <Setter Property="Background" Value="#FF316AC5" /> 
     </Trigger> 
     <Trigger Property="IsSelected" Value="False"> 
      <Setter Property="Background"> 
       <Setter.Value> 
        <MultiBinding Converter="{StaticResource CellToColorConverter}"> 
         <!-- Some bindings for the converter to compute the actual color --> 
        </MultiBinding> 
       </Setter.Value> 
      </Setter> 
     </Trigger> 
    </Style.Triggers> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type DataGridCell}"> 
       <Grid Background="{TemplateBinding Background}"> 
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" /> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 

    </Setter> 

這裏的任何想法?

非常感謝!

回答

2

好吧,我發現了一個非常正確的方式做到這一點,利用DrawingBrush

          <DrawingBrush TileMode="Tile" 
                 ViewportUnits="RelativeToBoundingBox" 
                 Viewport="0,0,0.20,1"> 
               <DrawingBrush.Drawing> 
                <DrawingGroup> 
                 <GeometryDrawing> 
                  <GeometryDrawing.Pen> 
                   <Pen Brush="Red" Thickness="0.83"/> 
                  </GeometryDrawing.Pen> 
                  <GeometryDrawing.Geometry> 
                   <RectangleGeometry Rect="0.3,0.4,0.3,0.21" RadiusX="0" RadiusY="0"/> 
                  </GeometryDrawing.Geometry> 
                 </GeometryDrawing> 
                 <GeometryDrawing> 
                  <GeometryDrawing.Pen> 
                   <Pen Brush="Black" Thickness="0.05"/> 
                  </GeometryDrawing.Pen> 
                  <GeometryDrawing.Geometry> 
                   <LineGeometry StartPoint="0,1" EndPoint="1,0" /> 
                  </GeometryDrawing.Geometry> 
                 </GeometryDrawing> 
                </DrawingGroup> 
               </DrawingBrush.Drawing> 
              </DrawingBrush> 

基本上你會畫一個紅色的矩形(你可以改變顏色當然),這將填補細胞,所以作爲背景,並繪製5條對角線。 您可以通過在此處切換x號來在線更改人數:Viewport="0,0,x,1"。在我的情況下,它是0.20,這意味着總表面的20%,例如Geometry將被繪製五次,每個佔據可用寬度的20%。

使用此刷爲任何DataGridCell的背景下,你會得到以下結果:

DataGrid templates

這幾乎正是我想要的東西(和渲染有點不是從GradientBrush想法更好dex3703)

2

這可能是某些人的口味有點哈克,但有一件事我已經作爲一種解決方法做的是使用VisualBrush或DrawingBrush作爲背景。您可以使用一組帶有紅色,綠色,白色和橙色的視覺刷,並使用散列圖樣式作爲疊加層。你可以用DrawingBrushes做同樣的事情。

或者,大聲想想,您可以使用DrawingBrush作爲您的顏色的不透明蒙板。這樣你就只需要一個哈希模式的筆刷。

[看在我的WPF書後...]

最簡單的可能是設置爲重複的spreadMethod一個一個LinearGradientBrush。玩起點和終點值以獲得條帶效果。這是一本書的例子:

<LinearGradientBrush StartPoint=".45,.45" EndPoint=".55,.55" SpreadMethod="Repeat"> 
<GradientStop Offset="0" Color="Blue"/> 
<GradientStop Offset="1" Color="Red"/> 
</LinearGradientBrush> 
+0

不錯的解決方案!它工作正常,我在中間添加了第二個'GradientStop',所以顏色將從「透明」變爲「黑色」而不會褪色......並且很好! WPF都總結了虛張聲勢! :-D – Damascus 2012-01-10 14:17:23

+0

我不會回答這個問題,只是爲了看看是否有其他人也會有一些虛張聲勢的想法,我很好奇:) – Damascus 2012-01-10 14:18:04

+0

唬騙?很高興它適合你! – dex3703 2012-01-10 18:15:11