円グラフを描画する私のWPFカスタムコントロールでは、文字列内の値のセットを指定して円グラフを描画することに成功しました。たとえば、「10 20 30」は円グラフを正しい比率で描画します。 DrawingImageの描画プロパティをコンバーターにバインドして、文字列をDrawingGroupに変換しました。これは素晴らしいものでしたが、私はコンバータの必要性を回避しようとしています。ここでWPFコンバータはカスタムコントロールに組み込まれていますか?
は私のメインウィンドウです:ここでは
<Grid Margin="10">
<local:PieChart DrawingCode="289 666 1337 780" Width="400" Height="400" RingWidth="300" Background="White" />
</Grid>
は、カスタムコントロールのための私のテンプレートです:
<Style TargetType="{x:Type local:PieChart}">
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:PieChart}">
<Grid>
<Image Width="{TemplateBinding Width}" Height="{TemplateBinding Height}">
<Image.Source>
<DrawingImage Drawing="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DrawingCode}" />
</Image.Source>
</Image>
<Ellipse Width="{TemplateBinding RingWidth}" Height="{TemplateBinding RingWidth}" Fill="{TemplateBinding Background}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
そして最後に、ここではカスタムコントロールのクラスで私の試みです:
public class PieChart : Control
{
public static readonly DependencyProperty DrawingCodeProperty = DependencyProperty.Register("DrawingCode", typeof(string), typeof(PieChart), new UIPropertyMetadata(null));
public static readonly DependencyProperty RingWidthProperty = DependencyProperty.Register("RingWidth", typeof(double), typeof(PieChart), new UIPropertyMetadata(null));
static PieChart()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(PieChart), new FrameworkPropertyMetadata(typeof(PieChart)));
}
public string DrawingCode
{
get { return DrawingCodeConverter((string)GetValue(DrawingCodeProperty)); }
set { SetValue(DrawingCodeProperty, value); }
}
public double RingWidth
{
get { return (double)GetValue(RingWidthProperty); }
set { SetValue(RingWidthProperty, this.Width - value); }
}
public DrawingGroup DrawingCodeConverter(string value)
{
// This converter works but is long so I removed it from the post.
}
}
私は使用しなければならないデータ型のどこかに問題があると確信しています。また、これとはまったく異なる方法がある場合は、私が知らないので、私に知らせてください。 RingWidthは問題ではないことに注意してください。DrawingCodeです。
:代わりに、このような
PropertyChangedCallback
であなたの依存関係プロパティを宣言。ありがとう! –文字列を描画グループに変換するためのコードをprivate void SetDrawingCode() { // Put Instance DrawingCodeプロパティ変更されたコードはここに DrawingCodeConverter(DrawingCode); } –
例では、DrawingCodeConverter(DrawingCode)を配置しますが、私のメソッドは文字列からDrawingGroupを返します。 SetDrawingCode()メソッドでDrawingGroupを取得した場合、その後に何をすればよいですか?すべての質問を申し訳ありませんが、私はちょうどこの周りに私の頭をラップするのに苦労しています –