C# 如何在其上对齐Canva子对象';从中间到特定坐标是多少?
我从我的ViewModel收到一些坐标,我需要WPF画布的一个子项,其中心位于这些坐标上 我怎样才能做到这一点?我尝试了几种渲染转换,但无法达到预期效果C# 如何在其上对齐Canva子对象';从中间到特定坐标是多少?,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,我从我的ViewModel收到一些坐标,我需要WPF画布的一个子项,其中心位于这些坐标上 我怎样才能做到这一点?我尝试了几种渲染转换,但无法达到预期效果 <Canvas> <SomeControl Canvas.Left="{Binding ToolBarHorizontalPosition}" Canvas.Top="{Binding ToolBarVerticalPosition}"/> </Canvas>
<Canvas>
<SomeControl Canvas.Left="{Binding ToolBarHorizontalPosition}" Canvas.Top="{Binding ToolBarVerticalPosition}"/>
</Canvas>
public MyViewModel: INotifyPropertyChanged{
public double ToolBarHorizontalPosition {get;set;}
public double ToolBarVerticalPosition{get;set;}
public void SomeUpdater(){
ToolBarHorizontalPosition = ...;
ToolBarVerticalPosition= ...;
// Raise property changed
}
}
公共MyViewModel:INotifyPropertyChanged{
公共双工具栏水平位置{get;set;}
公共双工具栏垂直位置{get;set;}
public-void-SomeUpdater(){
工具栏水平位置=。。。;
工具栏垂直位置=。。。;
//提升属性已更改
}
}
问题是控件将具有动态大小(其内容将增长),因此我无法直接计算工具栏位置以引用左/右(因为我不知道宽度)
有没有办法在XAML中实现这一点?事实上,我刚刚找到了一个解决方案,使用一个转换器,可以从ViewModel和
实际宽度中获取位置:
public class CenterValueConverter : IMultiValueConverter
{
public object Convert(object[] values,
Type targetType,
object parameter,
CultureInfo culture)
{
if (values == null || values.Length != 2)
{
return null;
}
double originalPosition = (double)values[0];
double size = (double)values[1];
return originalPosition - (size / 2);
}
public object[] ConvertBack(object value,
Type[] targetTypes,
object parameter,
CultureInfo culture)
{
throw new NotSupportedException();
}
}
然后在X轴中心的XAML中:
<Canvas>
<SomeControl Name="SomeControl" Canvas.Top="{Binding ToolBarVerticalPosition}">
<Canvas.Left>
<MultiBinding Converter="{StaticResource CenterValuerConverter}">
<Binding Path="ToolBarHorizontalPosition"/>
<Binding ElementName="SomeControl" Path="ActualWidth"/>
</MultiBinding>
</Canvas.Left>
</SomeControl>
</Canvas>