好的,这可能不是你要找的,但我发现你的问题很有趣。
我能够水平地做到这一点(新图像从左侧出现,而不是从右侧出现)。
通过在您的用户控件上将“FlowDirection”设置为“RightToLeft”,它将执行您需要的水平操作。我不知道这是否可能垂直。我还在研究中......
<Canvas FlowDirection="RightToLeft">
<Canvas.Background>
<ImageBrush ImageSource="Resources/image.jpg" Viewport="0,0,32,32" ViewportUnits="Absolute" TileMode="Tile" Stretch="None" AlignmentX="Left" AlignmentY="Bottom" />
</Canvas.Background>
</Canvas>
这是我的 UserControl 的第一个元素,但这个“FlowDirection”可以放置在用户控件根目录的基本元素(通常是网格)上。但是,使用画布,您可以确保此“流向”不会影响用户控件中的任何其他组件。
希望这能为您指明一个好的方向。
- 编辑 -
大声笑我不敢相信这有效,但它确实有效!基于我的第一个工作,并使用转换器作为画布的边距:
转换器:
[ValueConversion(typeof(double), typeof(Thickness))]
public class SizeToInverseMarginConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (targetType != typeof(Thickness))
throw new InvalidOperationException("The target must be of type 'Thickness'");
double vNewVal = -5000 + (double)value;
return new Thickness(0, vNewVal, 0, 0);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
然后用户控件的内容:
<UserControl.Resources>
<My:SizeToInverseMarginConverter x:Key="s2m" />
</UserControl.Resources>
<Grid x:Name="MainGrid">
<Canvas FlowDirection="RightToLeft" Margin="{Binding Path=ActualHeight, ElementName=MainGrid, Converter={StaticResource s2m}}">
<Canvas.Background>
<ImageBrush ImageSource="Resources/image.jpg" Viewport="0,0,32,32" ViewportUnits="Absolute" TileMode="Tile" Stretch="None" AlignmentX="Left" AlignmentY="Bottom" />
</Canvas.Background>
</Canvas>
</Grid>