1: <UserControl x:Class="GaugeUserControlLib.GaugeControl"
2: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4: xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
5: xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
6: xmlns:local="clr-namespace:GaugeUserControlLib"
7: xmlns:converter="clr-namespace:GaugeUserControlLib.Converter"
8: xmlns:panels="clr-namespace:GaugeUserControlLib.Panels"
9: xmlns:sys="clr-namespace:System;assembly=mscorlib"
10: mc:Ignorable="d"
11: d:DesignHeight="300" d:DesignWidth="300">
12: <UserControl.Resources>
13: <!--Converter um Radius des CirclePanel abhängig von der LayoutRoot breite zu berechnen-->
14: <converter:DoubleToHalfOfDoubleConverter x:Key="DoubleToHalfOfDoubleConverter"></converter:DoubleToHalfOfDoubleConverter>
15: <!--gibt abhängig vom angegebenen Int eine Liste an von Pfaden zurück (verfielfältigung von Pfadobjekten für Ticks)-->
16: <converter:IntegerToPathListConverter x:Key="IntegerToPathListConverter"></converter:IntegerToPathListConverter>
17: <!--Ressource für die Pfadbreite-->
18: <!--
19: <sys:Double x:Key="PathWidth">4</sys:Double>-->
20: <!--Referenzpfad für Ticks-->
21: <!--<Path x:Key="TickPath" Data="M0,0 H10" Width="{StaticResource PathWidth}" Fill="DimGray" Stroke="DimGray" StrokeThickness="6"></Path>-->
22: </UserControl.Resources>
23: <!--Container für Control. Behandelt den UserInput zum einstellen des Zeigers-->
24: <Grid x:Name="LayoutRoot" MouseMove="LayoutRoot_MouseMove" MouseDown="LayoutRoot_MouseDown" MouseUp="LayoutRoot_MouseUp">
25: <!--Dient als Host für das CirclePanle zur Anzeige der Ticks im Ziffernblatt-->
26: <ListBox x:Name="LBTicks" IsEnabled="False" BorderThickness="0">
27: <ListBox.ItemsSource>
28: <MultiBinding Converter="{StaticResource IntegerToPathListConverter}">
29: <Binding Path="TickCount" RelativeSource="{RelativeSource Mode=FindAncestor,
30: AncestorType=UserControl}"/>
31: <Binding Path="TickPath" RelativeSource="{RelativeSource Mode=FindAncestor,
32: AncestorType=UserControl}"/>
33: </MultiBinding>
34: </ListBox.ItemsSource>
35: <ListBox.ItemsPanel>
36: <ItemsPanelTemplate>
37: <!--Custom CirclePanel zur kreisförmigen anordnung der Ticks im Ziffernblatt-->
38: <!--Radius ist abhängig von der Größe des Rootcontainers und der Breite der Ticks-->
39: <panels:CirclePanel RenderTransformOrigin="0.5 0.5" Radius="{Binding ElementName=LayoutRoot, Path=ActualWidth, Converter={StaticResource DoubleToHalfOfDoubleConverter}}">
40: <panels:CirclePanel.RenderTransform>
41: <TransformGroup>
42: <!--initiale Rotation des Panels damit der erste Tick mitte links beginnt-->
43: <RotateTransform Angle="-180"></RotateTransform>
44: </TransformGroup>
45: </panels:CirclePanel.RenderTransform>
46: </panels:CirclePanel>
47: </ItemsPanelTemplate>
48: </ListBox.ItemsPanel>
49: </ListBox>
50: <!--repräsentiert den Zeiger, dünne Seite repräsentiert aktuellen Wert-->
51: <Polygon x:Name="Needle" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Points="0,3 0,4 7,7, 7.15,3.5 7,0" Height="4" Stroke="Black" Fill="Black" Width="{Binding ElementName=LayoutRoot, Path=ActualWidth}" Stretch="Fill" RenderTransformOrigin="0.5, 0.5">
52: </Polygon>
53: <!--kennzeichnet Mittelpunkt des Tacho-->
54: <Border Background="LightGray" Width="5" Height="5" HorizontalAlignment="Center" VerticalAlignment="Center" CornerRadius="2"/>
55: </Grid>
56: </UserControl>