2016-03-02 58 views
1

我該如何創建量表(即速度計)?我該如何創建一個量表(即速度計)?

具體而言,我試圖在此link上構建圖像。

enter image description here

我成功創造一個環。但是,現在我需要將刻度添加到環中。

XAML:

<Window x:Class="MotoLens.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:MotoLens" 
     mc:Ignorable="d" 
     Background="Black" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <local:ValueToBrushConverter x:Key="ValueToBrushConverter" /> 
    </Window.Resources> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
      <RowDefinition /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 

     <Ellipse Grid.Row="0" Width="300" Fill="Transparent" StrokeThickness="10" Stroke="{Binding ElementName=Slider, Path=Background}" StrokeDashArray="1" StrokeEndLineCap="Square" /> 
    </Grid> 
</Window> 
+0

爲什麼在發佈XAML和ValueConverter代碼時,如果與上一個問題沒有關係,您最後一個問題?無論如何,我會創建兩個圖形,其中一個點亮而不是另一個。將未亮起的一個放在背景中,然後將點亮的一個放在背景中,然後創建一個ArcSegment,並相應地設置開始和結束角度,並將其用作點亮圖形的不透明度圖。 –

+1

我會搜索「WPF速度計」並使用其中的答案,例如https://wpfgauge.codeplex.com/ –

+0

@MarkFeldman - 感謝您的幫助。這可以使用XAML來完成嗎?或者我以編程方式做這個? –

回答

4

在過去,當我不得不創建自定義餅圖和要求橢圓形和弧形等各種事情,我已經使用了Microsoft.Expression.Drawing庫。只需將該參考添加到您的項目中,即可獲得Arc,這將在這裏創造奇蹟。使用Path,ArcSegment和其他各種組件可以達到完全相同的效果,但我發現使用Arc很容易。說到添加引用......這是類似這樣的原因之一是在Blend中處理的,如果你還沒有這樣做,因爲它會自動引入這些引用。這裏我沒有做出任何假設,所以我就給出了添加參考的說明。

因此,隨着中說,這裏有一個例子有10分鐘的項目,顯示你可以做什麼:

enter image description here

<Window x:Class="WpfApplication.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing" 
     xmlns:local="clr-namespace:WpfApplication1" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid Background="#FF2E2F45"> 
     <Grid Margin="0,0,0,-120"> 
      <ed:Arc StartAngle="-120" EndAngle="120" Stretch="None" 
        Height="300" Width="300" StrokeThickness="20"  
        StrokeDashArray=".25" Stroke="#FF484D5F"/> 
      <ed:Arc StartAngle="-120" EndAngle="-35" Stretch="None" 
        Height="300" Width="300" StrokeThickness="20" 
        StrokeDashArray=".25" Stroke="Turquoise"/> 
     </Grid> 
     <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" 
        Margin="0,0,0,-50"> 
      <TextBlock Text="km/h" Foreground="#FF878A9F" HorizontalAlignment="Center" 
         FontSize="14"/> 
      <TextBlock Text="43" Foreground="White" HorizontalAlignment="Center" 
         FontSize="110" FontWeight="Light" Margin="0,-25,0,0"/> 
     </StackPanel> 
    </Grid> 
</Window> 

不言而喻,有很多的靜態代碼去在那裏,只要放置東西,但這是爲了示範。根據你提供的鏈接中該應用的圖像顯示,大部分內容甚至不是必需的,但是我對於細節非常執着,並且希望佈局能夠在問題中與你的截圖相匹配。我假設你會創建一個控件,所以你要清理它並創建適當的綁定。

就圓形漸變主題而言,我並沒有在這裏討論這個問題,因爲這是一個完全不同於你詢問的主題,更多可以在這裏找到一個不同的StackOverflow問題:Creating Gradient Brush along a Circular Path

+1

哇......你看起來很容易。有沒有什麼閱讀材料可以推薦用於構建像這樣的自定義控件? –

+2

@ScottNimrod嗯......這是一個非常好的問題,因爲我在幾年前開始的時候有着完全一樣的問題。不幸的是,除了您可以在書籍和互聯網上找到的自定義控件的基礎知識外,沒有人真正瞭解細節。我說你最好的選擇是「WPF控制開發釋放:建立高級用戶體驗。「請注意,它假定對WPF非常瞭解,我遇到過的其他所有內容都有相當通用的內容,你可以在MSDN上找到這些內容,這些內容只是讓你開始,其餘的只是經驗。 –

相關問題