Ark*_*kun 5 silverlight xaml canvas centering windows-runtime
关于在a中定位元素的常见问题Canvas是"如何定位元素的中心(而不是左上角)".
提出了几种解决方案,但它们都有缺点.
是否有一个简单的(仅限XAML)方法将一个元素放在画布中,以便它Canvas.Left与Canvas.Top元素的中心对应,并且大小和位置属性都可以绑定到其他一些属性?
我在WPF中找到了一种非常简单的方法(仅Margin="-1000000" 使用WPF中的XAML设置在Canvas内部定位元素(而不是左上角)),但它不适用于Silverlight/WinRT .我知道的唯一其他方法需要创建ValueConverter才能执行x *= -0.5计算(不仅仅是XAML).
虽然它不太漂亮,但下面是一个使用RenderTransform不同原点的嵌套来偏移对象位置以使其居中的示例:
<UserControl x:Class="UrlTest.Center"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Canvas x:Name="LayoutRoot" Background="White">
<ContentControl Canvas.Top="100" Content="{Binding ActualWidth,ElementName=Center, StringFormat=Width \{0\}}"/>
<ContentControl Canvas.Top="120" Content="{Binding ActualHeight,ElementName=Center, StringFormat=Height \{0\}}"/>
<Grid x:Name="Center" RenderTransformOrigin="-.5,-.5" Canvas.Left="40" Canvas.Top="25">
<Grid.RenderTransform>
<ScaleTransform ScaleX="-1" ScaleY="-1"/>
</Grid.RenderTransform>
<Grid RenderTransformOrigin="-.25,-.25">
<Grid.RenderTransform>
<ScaleTransform ScaleX="-1" ScaleY="-1"/>
</Grid.RenderTransform>
<Ellipse Width="80" Height="50" Fill="Aquamarine"/>
<ContentControl FontSize="20" HorizontalContentAlignment="Center" VerticalContentAlignment="Center">Center</ContentControl>
</Grid>
</Grid>
</Canvas>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
内部Grid用于创建转换,而外部Canvas用于确保其Grid内部将其大小设置为其内部内容的大小。
| 归档时间: |
|
| 查看次数: |
3044 次 |
| 最近记录: |