我有一个代码:
<Page x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Page.Resources>
<XmlDataProvider x:Key="TestData" XPath="/Base">
<x:XData>
<Base>
<Stage>
<Curve xstep="2">
<Point Value="10"/>
<Point Value="50"/>
<Point Value="20"/>
<Point Value="50"/>
<Point Value="30"/>
</Curve>
</Stage>
</Base>
</x:XData>
</XmlDataProvider>
<DataTemplate x:Key="TestDataTemplate">
<Grid>
<Grid.LayoutTransform>
<ScaleTransform ScaleX="1" ScaleY="-1" CenterX=".5" CenterY=".5" />
</Grid.LayoutTransform>
<Image>
<Image.Source>
<DrawingImage>
<DrawingImage.Drawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="Red" Thickness="1"/>
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<PathGeometry>
<PathFigure>
<PolyLineSegment>
<PolyLineSegment.Points>
<Point X="2" Y="{Binding ???}"/>
</PolyLineSegment.Points>
</PolyLineSegment>
</PathFigure>
</PathGeometry>
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingImage.Drawing>
</DrawingImage>
</Image.Source>
</Image>
</Grid>
</DataTemplate>
</Page.Resources>
<Grid Background="#DDD">
<StackPanel>
<ListBox
Background="#999"
BorderThickness="2"
BorderBrush="White"
Margin="10"
ItemsSource="{Binding Source={StaticResource TestData}, XPath=Stage}"
ItemTemplate="{StaticResource TestDataTemplate}"/>
</StackPanel>
</Grid>
我需要使用XmlDocument的Curve部分的Point数据构建一条曲线。 我无法理解如何绑定到PolylineSegment的点。有没有办法如何在没有xaml-behind代码的情况下仅在XAML中构建它。问题我无法绑定到任何点的x和y坐标,因为它不是依赖对象。我需要唯一的XAML代码。
计算x坐标。它以0开始,并且由xstep为每个新点增加。所以第一个点的x坐标是0,第二个是2,第三个是4等等.y坐标被当作Point标签的Value元素的值。
提前致谢!
答案 0 :(得分:0)
你被Y
的{{1}}属性所困,你可能无法绑定它,因为它不是依赖属性,所以这种方法可能无法帮助你
我确实试图根据你的评论达到同样的效果。
Point
你还需要一个转换器,因为必须计算点数
<Grid Background="#DDD"
xmlns:l="clr-namespace:CSharpWPF">
<Grid.Resources>
<XmlDataProvider x:Key="TestData"
XPath="/Base">
<x:XData>
<Base xmlns="">
<Stage>
<Curve xstep="2">
<Point Value="10" />
<Point Value="50" />
<Point Value="20" />
<Point Value="50" />
<Point Value="30" />
</Curve>
</Stage>
</Base>
</x:XData>
</XmlDataProvider>
<l:PointConverter x:Key="PointConverter" />
</Grid.Resources>
<StackPanel>
<ListBox Background="#999"
BorderThickness="2"
BorderBrush="White"
Margin="10"
ItemsSource="{Binding Source={StaticResource TestData}, XPath=Stage/Curve}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Polyline Stroke="Red"
StrokeThickness="1"
Points="{Binding Converter={StaticResource PointConverter}}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</Grid>
结果
看看这是否符合预期。让我知道它是否不同