我有一个Image内部Canvas:
<Canvas>
<Image HorizontalAlignment="Center" VerticalAlignment="Center" />
</Canvas>
Run Code Online (Sandbox Code Playgroud)
我希望在我的中心显示Image 始终(即使在可能的大小调整之后)Canvas,但是这样,图像在左上角绘制.我能怎么做?
如果你改变图像和画布的大小,那么这种方法最酷的东西就会起作用.转换器代码:
internal sealed class CenterConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
double canvasWidth = System.Convert.ToDouble(values[0]);
double canvasHeight = System.Convert.ToDouble(values[1]);
double controlWidth = System.Convert.ToDouble(values[2]);
double controlHeight = System.Convert.ToDouble(values[3]);
switch ((string)parameter)
{
case "top":
return (canvasHeight - controlHeight) / 2;
case "bottom":
return (canvasHeight + controlHeight) / 2;
case "left":
return (canvasWidth - controlWidth) / 2;
case "right":
return (canvasWidth + controlWidth) / 2;
default:
return 0;
}
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
XAML,资源中的某个地方:
<local:CenterConverter x:Key="CenterConverter" />
Run Code Online (Sandbox Code Playgroud)
XAML:
<Canvas x:Name="superCoolCanvas">
<Image x:Name="superCoolImage" >
<Canvas.Top>
<MultiBinding Converter="{StaticResource CenterConverter}" ConverterParameter="top">
<Binding ElementName="superCoolCanvas" Path="ActualWidth" />
<Binding ElementName="superCoolCanvas" Path="ActualHeight" />
<Binding ElementName="superCoolImage" Path="ActualWidth" />
<Binding ElementName="superCoolImage" Path="ActualHeight" />
</MultiBinding>
</Canvas.Top>
<Canvas.Left>
<MultiBinding Converter="{StaticResource CenterConverter}" ConverterParameter="left">
<Binding ElementName="superCoolCanvas" Path="ActualWidth" />
<Binding ElementName="superCoolCanvas" Path="ActualHeight" />
<Binding ElementName="superCoolImage" Path="ActualWidth" />
<Binding ElementName="superCoolImage" Path="ActualHeight" />
</MultiBinding>
</Canvas.Left>
</Image>
</Canvas>
Run Code Online (Sandbox Code Playgroud)