1

我有一个仅包含图像的用户控件。该图像是在执行时计算的。在后面有一个 WritableBitMap,我在其中进行绘图。然后将 image.source 设置为这个 WritableBitMap。所以我的用户控件看起来像:

public partial class ColorBrainMap : UserControl
{  
    //... some stuff
    //I load the base image from the resources
    BitmapImage tempImg = new BitmapImage();
    tempImg.BeginInit();
    tempImg.UriSource = new Uri("pack://application:,,,/ColorBrainMap;component/imgs/brain.png");
    tempImg.EndInit();

    //I copy the image into a WritableBitMap for convenience
    WriteableBitmap baseImage = new WriteableBitmap(tempImg);
    //I do some plotting over the base image
    //and set the final result as a source for the image
    image.Source = baseImage;
 }

另一方面,我的 xaml 非常简单:

<Grid>
        <Image HorizontalAlignment="Stretch" Name="image" Stretch="Fill" VerticalAlignment="Stretch"/>
</Grid>

我创建了我的新项目。我将组件添加为引用并将一个新实例拖放到我的 xaml 中,因此它看起来像这样:

<Window x:Class bla bla 
    Height="396" Width="541" 
    xmlns:my="clr-namespace:ColorBrainMapTOOL;assembly=ColorBrainMap">
    <Grid>
      <Grid.ColumnDefinitions>
        <ColumnDefinition Width="300*" />
        <ColumnDefinition Width="219*" />
      </Grid.ColumnDefinitions>
      <my:ColorBrainMap HorizontalAlignment="Stretch" Name="brainMap" VerticalAlignment="Stretch" />
      <!-- some other components in the other column of the grid-->
      </Grid>
</Window>

在我尝试调整它的大小之前,整个事情都很好。控件本身会调整大小(我测试了它添加了一些背景和边框,整个东西移动得很好),但不是图像。该图像会根据需要重新计算绘图并且效果很好,但它会卡在初始大小上。

在不调整内部图像大小和重新计算绘图以及所有这些再次起作用的情况下如何做到这一点的任何线索?

4

2 回答 2

1

我认为您可以使用 aViewBox并将您的 Image 或 theColorBrainMap设置为它的子项;

于 2012-12-13T08:52:57.237 回答
0

您可以尝试使用绑定:

<Grid>
    <Image Height="{Binding RelativeSource={RelativeSource AncestorType={x:Type Grid}}, Path=ActualHeight}" Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type Grid}}, Path=ActualWidth}" Name="image" Stretch="Fill">
</Grid>
于 2012-12-13T09:06:49.230 回答