私は楕円形のプログレスバーが必要なゲージを作成しています。進捗バーのインジケータが楕円の下から上に移動するようにしたいと思います。私はそれを問題なく左から右に働かせることができます。ここで楕円形のプログレスバーの垂直インジケータ
スタイルのコードです:ここで
<Style TargetType="ProgressBar" x:Key="HalfCircle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ProgressBar">
<Grid x:Name="gridRoot">
<Ellipse x:Name="PART_Track" HorizontalAlignment="Left" Height="150" Stroke="Black" VerticalAlignment="Top" Width="150" Clip="M0.5,0.5 L153.5,0.5 L153.5,76.5 L0.5,76.5 z">
<Ellipse.Fill>
<MultiBinding>
<MultiBinding.Converter>
<converter:ProgressBarIndicatorConverter/>
</MultiBinding.Converter>
<Binding Path="Foreground" RelativeSource="{RelativeSource TemplatedParent}"/>
<!--<Binding Path="Orientation" RelativeSource="{RelativeSource TemplatedParent}"/>-->
<!--<Binding Path="Background" RelativeSource="{RelativeSource TemplatedParent}"/>-->
<!--<Binding Path="Minimum" RelativeSource="{RelativeSource TemplatedParent}"/>
<Binding Path="Maximum" RelativeSource="{RelativeSource TemplatedParent}"/>-->
<Binding Path="IsIndeterminate" RelativeSource="{RelativeSource TemplatedParent}"/>
<Binding Path="ActualWidth" ElementName="PART_Indicator"/>
<Binding Path="ActualHeight" ElementName="PART_Indicator"/>
<Binding Path="ActualWidth" ElementName="PART_Track"/>
<!--<Binding Path="ActualHeight" ElementName="PART_Track"/>-->
</MultiBinding>
</Ellipse.Fill>
</Ellipse>
<Decorator x:Name="PART_Indicator" RenderTransformOrigin="0.5,0.5" />
</Grid>
<!--<ControlTemplate.Triggers>
<Trigger Property="Orientation" Value="Vertical">
</Trigger>
</ControlTemplate.Triggers>-->
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
は、関連するXAMLです:
<ProgressBar x:Name="pbPos" Height="158" Width="158" Margin="8,6,0,0" Orientation="Vertical" Style="{StaticResource HalfCircle}" Foreground="{StaticResource RotationLightGreen}" />
あなたがコメントアウトコードで見ることができるように、私はいくつかをしようとしています無駄なもの...
UPDATE < < <
私は次のようにクリップされプログレスバーとコードビハインドでいくつかの依存関係プロパティでユーザーコントロールを作成することになった:
XAMLを:
<Grid>
<ProgressBar x:Name="pbEllipse" Orientation="Vertical" Background="Transparent" Minimum="0" Maximum="100" Height="150" Width="150" Margin="0,0" HorizontalAlignment="Left" VerticalAlignment="Top">
<ProgressBar.Clip>
<PathGeometry>
<PathFigure IsFilled="True" IsClosed="False" StartPoint="0,75">
<BezierSegment Point3="75,0" Point2="33.5786476135254,0" Point1="0,33.5786399841309"/>
<BezierSegment Point3="150,75" Point2="150,33.5786399841309" Point1="116.421363830566,0"/>
</PathFigure>
</PathGeometry>
</ProgressBar.Clip>
</ProgressBar>
</Grid>
コードビハインド:
public partial class PitchProgressBar : UserControl
{
public static DependencyProperty ProgressIndicatorColorProperty = DependencyProperty.Register("ProgressIndicatorColor", typeof(Brush), typeof(PitchProgressBar), new PropertyMetadata(new PropertyChangedCallback(ProgressIndicatorColorPropertyChanged)));
public static DependencyProperty ProgressIndicatorValueProperty = DependencyProperty.Register("ProgressIndicatorValue", typeof(double), typeof(PitchProgressBar), new PropertyMetadata(new PropertyChangedCallback(ProgressIndicatorValuePropertyChanged)));
private static void ProgressIndicatorColorPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var ctl = d as PitchProgressBar;
if (ctl != null)
{
ctl.pbEllipse.Foreground = (Brush)e.NewValue;
}
}
private static void ProgressIndicatorValuePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var ctl = d as PitchProgressBar;
if (ctl != null)
{
ctl.pbEllipse.Value = (double)e.NewValue;
}
}
public PitchProgressBar()
{
InitializeComponent();
}
public Brush ProgressColor
{
get { return (Brush)GetValue(ProgressIndicatorColorProperty); }
set { SetValue(ProgressIndicatorColorProperty, value); }
}
public double ProgressIndicatorValue
{
get { return (double)GetValue(ProgressIndicatorValueProperty); }
set { SetValue(ProgressIndicatorValueProperty, value); }
}
}
一つのオプション...あなたは、変換のレイアウトを適用することができ全体を90度回転させるだけですか? – Joe
待って、巨大なマルチバインディングはどうしていますか? – Joe
回転を使用できません...半円全体が回転し、平坦な端が底になるようにします。 – Radiohead