我有一个路径谁的数据来自LineGeometry。我还有一个创建路径时创建的TextBlock。 TextBlock的位置遵循Path的位置的正确方法是什么?绑定控件位置到另一个路径
0
A
回答
0
还有一堆的方式
- 含在自定义面板的路径和TestBlock,并实施的MeasureOverride和ArrangeOverride
- 使用一个已经存在的面板(网格,StackPanel中,等)
- 听取LayoutUpdated的Path对象,然后使用TranslatePoint方法定位TextBlock
每种方式都有其缺点和优点,它取决于您的整个窗口布局以及路径布局如何动态变化
0
最简单的解决方案是将Path和TextBlock放入一个公共容器中,以在TextBlock上执行必要的布局。这可能是一个网格:
<Canvas>
<Grid>
<Path ... />
<TextBlock Text="Label" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</Canvas>
您也可以通过对实际计算结合其RenderTransform
(或LayoutTransform
)到Path的Geometry
和使用binding converter相对路径的中心TextBlock的位置。转换器将例如将几何转换为TranslateTransform
。请注意,它甚至不需要几何体为线几何体。它只是使用几何的Bounds
。但是,您可以执行任何专门的计算,具体取决于几何的实际类型。
public class GeometryCenterConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var result = new TranslateTransform();
var geometry = value as Geometry;
if (geometry != null)
{
result.X = (geometry.Bounds.Left + geometry.Bounds.Right)/2;
result.Y = (geometry.Bounds.Top + geometry.Bounds.Bottom)/2;
}
return result;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
你会写这样的绑定:
<Path Name="path" ... />
<TextBlock Text="Label"
RenderTransform="{Binding Path=Data, ElementName=path,
Converter={StaticResource GeometryCenterConverter}}"/>
注意上面的例子并不需要将TextBlock任何对准考虑。如果您需要将其设置为居中或者右对齐或底对齐,则可能需要更复杂的绑定(也许是MultiBinding),或者您可以将所有元素放在Canvas中,并在TextBlock上适当地设置Canvas.Left
和Canvas.Top
。
相关问题
- 1. 我该如何实现一个绑定路径,该绑定路径被另一个绑定绑定?
- 2. 如何将一个控件绑定到另一个控件?
- 3. WPF:如何绑定到另一个控件绑定的属性?
- 4. Excel VBA-将文件保存到另一个位置时隐藏路径
- 5. 如何将一个控件的属性绑定到另一个控件?
- 6. 将矩形位置绑定到另一个矩形
- 7. 实现建议:将一个按钮(Click事件)绑定到一个函数,并绑定到另一个控件
- 8. 绑定到复合路径
- 9. 将元素的位置绑定到另一个元素的位置
- 10. 将路径绑定到主文件
- 11. 将文件从一个位置复制到另一个位置
- 12. 将文件从一个位置复制到另一个位置
- 13. 如何通过点击绑定图像从另一个绑定图像源路径获取图像源路径
- 14. 从一个路径复制一个特定的文件到另一个
- 15. 重定向从一个路径到另一个快递
- 16. 得到给定一个路径和文件名路径名
- 17. DataTemplate中的内容绑定到另一个用户控件
- 18. 在另一个视图中绑定到控件的属性
- 19. 将控件绑定到另一个属性
- 20. 绑定到另一个控件的模板
- 21. 将数据绑定到另一个控件
- 22. ASP.NET绑定到一个控件属性
- 23. radgrid控件绑定到一个列表
- 24. 绑定路径PointTemplate
- 25. 如何将控件的属性绑定到另一个控件的属性?
- 26. nginx - 将某个路径重定向到另一个域
- 27. WPF自定义控件 - 绑定模板项目的路径
- 28. SVG路径位置
- 29. PHP路径位置
- 30. angularfire2,如何绑定到一个列表的路径不同
“路径的位置”究竟是什么?当存在一个LineGeometry时,我可以考虑至少三个位置,即行起点和终点,以及两者的中心。你将如何放置(或对齐)TextBlock相对于其中的一个点?你必须提供更多关于你将要实现的信息。 – Clemens 2013-02-24 09:14:00
@Clemens我试图将文本块放在点的中心,我可以使用简单的数学方法。开始点和结束点可以移动/拖动到任意位置,我希望文本块随着路径端点的更新而更新。 – Bob 2013-02-24 09:35:49