2016-12-23 4 views
2

PlotViewではなくPlotを使用して、XAMLでOxyplotを設定しました。 (私は、完全なPlotModelではなく、個々のプロパティにBindingを使用しています)。WPFおよびXAMLでのOxyPlot LineAnnotation可視性

設定では、必要に応じて表示または非表示にしたい6つのLineAnnotationsを使用します。

私はLineAnnotationsのVisibilityプロパティをViewModelのプロパティに接続するためにBindingを使用しました。プロパティはブール値で、値をVisibility.CollapsedまたはVisibility.Visibleに変換するためにコンバーターを使用しています(でも、Visibilityタイプのプロパティを定義しておくこともできます)。

これは機能しません。 LineAnnotationsは常に表示されます。

実際、私はLineAnnotationのVisibilityプロパティがまったく機能しないと思います。

誰でもこの問題を確認できますか?

私のViewModelのプロパティに基づいてLineAnnotationsを表示または非表示にする別の方法はありますか?

コード内にLineAnnotationsを追加したり削除したりするのではなく、XAML設定を使用することをお勧めします。

更新

要求されるように、いくつかのコード

XAML

<oxy:Plot Grid.Row="1"> 
    <oxy:Plot.Axes> 
    <oxy:LinearAxis Key="yAxis" 
        Position="{Binding Path=XAxisInverted, Converter={StaticResource BoolToAxisPosition_fl_tr}}" 
        Minimum="{Binding YAxis_Min}" 
        Maximum="{Binding YAxis_Max}" 
        MajorGridlineStyle="Dot" 
        MajorGridlineColor="LightGray" 
        Title="Velocity [km/h]" /> 
    <oxy:LinearAxis Key="xAxis" 
        Position="Bottom" 
        Minimum="{Binding XAxisNumericMin}" 
        Maximum="{Binding XAxisNumericMax}" 
        StartPosition="{Binding Path=XAxisInverted, Converter={StaticResource BoolToInt_f0_t1}}" 
        EndPosition="{Binding Path=XAxisInverted, Converter={StaticResource BoolToInt_f1_t0}}" 
        MajorGridlineStyle="Dot" 
        MajorGridlineColor="LightGray" 
        Title="Position [m]" /> 
    </oxy:Plot.Axes> 
    <oxy:Plot.Series> 
    <oxy:LineSeries ItemsSource="{Binding PointsRef1}" 
        DataFieldX="X" 
        DataFieldY="Y" 
        StrokeThickness="1" 
        MarkerSize="0" 
        LineStyle="Solid" 
        Color="DarkGray" 
        MarkerType="None"/> 
    <oxy:LineSeries ItemsSource="{Binding PointsRef2}" 
        DataFieldX="X" 
        DataFieldY="Y" 
        StrokeThickness="1" 
        MarkerSize="0" 
        LineStyle="Solid" 
        Color="DarkGray" 
        MarkerType="None"/> 
    <oxy:LineSeries ItemsSource="{Binding PointsBlack}" 
        DataFieldX="X" 
        DataFieldY="Y" 
        StrokeThickness="1" 
        MarkerSize="0" 
        LineStyle="Solid" 
        Color="Black" 
        MarkerType="None"/> 
    <oxy:LineSeries ItemsSource="{Binding PointsRed}" 
        DataFieldX="X" 
        DataFieldY="Y" 
        StrokeThickness="1" 
        MarkerSize="0" 
        LineStyle="Solid" 
        Color="Red" 
        MarkerType="None"/> 
    <oxy:LineSeries ItemsSource="{Binding PointsBlue}" 
        DataFieldX="X" 
        DataFieldY="Y" 
        StrokeThickness="1" 
        MarkerSize="0" 
        LineStyle="Solid" 
        Color="Blue" 
        MarkerType="None"/> 
    <oxy:LineSeries ItemsSource="{Binding PointsGreen}" 
        DataFieldX="X" 
        DataFieldY="Y" 
        StrokeThickness="1" 
        MarkerSize="0" 
        LineStyle="Solid" 
        Color="Green" 
        MarkerType="None"/> 
    </oxy:Plot.Series> 
    <oxy:Plot.Annotations> 
    <oxy:LineAnnotation x:Name="BrakePosRear" Type="Vertical" Color="{Binding BrakePosRear_1_Color}" Visibility="{Binding Path=BrakePosRear_1_Enabled, Converter={StaticResource BoolToVisibility}}" X="{Binding BrakePosRear_1_Value}" local:AnnotationDragableBehavior.IsDragable="True" /> 
    <oxy:LineAnnotation x:Name="BrakePosFront" Type="Vertical" Color="{Binding BrakePosFront_1_Color}" Visibility="{Binding Path=BrakePosFront_1_Enabled, Converter={StaticResource BoolToVisibility}}" X="{Binding BrakePosFront_1_Value}" local:AnnotationDragableBehavior.IsDragable="True" /> 
    <oxy:LineAnnotation x:Name="RefPos"   Type="Vertical" Color="{Binding RefPos_1_Color}"  Visibility="{Binding Path=RefPos_1_Enabled,  Converter={StaticResource BoolToVisibility}}" X="{Binding RefPos_1_Value}"  local:AnnotationDragableBehavior.IsDragable="True" /> 
    <oxy:LineAnnotation x:Name="BrakePosRear2" Type="Vertical" Color="{Binding BrakePosRear_2_Color}" Visibility="{Binding Path=BrakePosRear_2_Enabled, Converter={StaticResource BoolToVisibility}}" X="{Binding BrakePosRear_2_Value}" local:AnnotationDragableBehavior.IsDragable="True" /> 
    <oxy:LineAnnotation x:Name="BrakePosFront2" Type="Vertical" Color="{Binding BrakePosFront_2_Color}" Visibility="{Binding Path=BrakePosFront_2_Enabled, Converter={StaticResource BoolToVisibility}}" X="{Binding BrakePosFront_2_Value}" local:AnnotationDragableBehavior.IsDragable="True" /> 
    <oxy:LineAnnotation x:Name="RefPos2"  Type="Vertical" Color="{Binding RefPos_2_Color}"  Visibility="{Binding Path=RefPos_2_Enabled,  Converter={StaticResource BoolToVisibility}}" X="{Binding RefPos_2_Value}"  local:AnnotationDragableBehavior.IsDragable="True" /> 
    </oxy:Plot.Annotations> 
</oxy:Plot> 

型コンバータ

class BoolToVisibility : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
    return System.Convert.ToBoolean (value) ? Visibility.Visible : Visibility.Collapsed ; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
    throw new NotImplementedException(); 
    } 
} 

は、私はまた、上のマウスイベントをハンドルに取り付けられ振る舞いを持っていますLineAnnotation(whic hはかなり涼しいですが)、私はそれが関連しているとは思わない。

また、Visibility = "Collapsed"(および "Hidden")をXAMLで直接指定しようとしましたが、効果はありません。

バインディングが機能しない場合でも、XAMLの値をハードコーディングする必要があります。

+0

私たちにいくつかのコードを見せてください。何か問題があれば、わかります。 –

+0

ラインリストの色を透明に設定してみてください。私はそれが最善の解決策ではないことを知っていますが、私は同じ問題を抱えており、それは私のために働いています。 – Jose

+0

ビジュアルツリーを見れば、 'LineAnnotation'エンティティがなくなり、' Visibility'プロパティの値を調べることさえ可能であることがわかります。それはすべて、ポリライン、パス、テキストブロックなどの基本的なコンポーネントに分かれています。 – jsanalytics

答えて

3

OxyPlotおよびOxyPlot.Wpfの現在の実装では、これは機能しません。

OxyPlot.Wpf.LineAnnotationクラスは、内部クラスOxyPlot.LineAnnotationのラッパーです。 Visibliltyプロパティを処理するには、プロパティを内部LineAnnotationクラスの適切なプロパティにマップする必要があります。

2つの問題があります。 Wpf.LineAnnotationはVisibliltyプロパティを処理しないだけでなく、マッピングできるLineAnnotationクラスに基底のプロパティがありません。 LineAnnotationクラスには、それ自体を非表示にする概念はありません。

これはOxyPlotとXAMLの間の不一致です。 jstreetが指摘しているように、LineAnnotationはビジュアルツリーにはまったく表示されません。

関連する問題