Silverlight MultiScaleImage не будет заполнять доступное пространство - PullRequest
3 голосов
/ 06 января 2010

Это я или MultiScaleImage даже не отображает без явной ширины и высоты? Я не могу заставить его заполнить ячейку сетки по какой-то причине. Он ведет себя иначе, чем большинство других элементов.

Если я урежу высоту и ширину в средстве просмотра, он вообще не отобразится.

РЕДАКТИРОВАТЬ: Вот полная картина ... XAML:

<UserControl x:Class="CliqueSite.DeepZoom.Viewer.ZoomPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid x:Name="LayoutRoot" Background="Black">
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="34" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <MultiScaleImage x:Name="Viewer" Margin="1,1,1,0" Height="675" Width="900" />
    <Rectangle Grid.Row="1">
        <Rectangle.Fill>
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                <GradientStop Color="#FF000000"/>
                <GradientStop Color="#FF808080" Offset="1"/>
            </LinearGradientBrush>
        </Rectangle.Fill>
    </Rectangle>
    <Button HorizontalAlignment="Right" Margin="0,0,4,4" VerticalAlignment="Bottom" Padding="6" Grid.Row="1"
            Content="Zoom Reset" x:Name="ZoomReset" FontSize="9" FontFamily="Verdana" />
</Grid>

Соответствующий код:

[ScriptableMember]
public void SetSource(int width, int height, int tileSize, int id, string urlToFormat)
{
    Viewer.Source = new ViewerSource(width, height, tileSize, id, urlToFormat);
    double x = 0;
    double y = 0;
    double w = 1;
    if ((width > height && Viewer.Width > Viewer.Height) || (width > height && Viewer.Width < Viewer.Height))
    {
        double scaleFactor = Viewer.Width / width;
        double adjustedHeight = height * scaleFactor;
        double topSpace = (Viewer.Height - adjustedHeight) / 2;
        y = -(topSpace / Viewer.Height) * (Viewer.Height / Viewer.Width);
    }
    else
    {
        double scaleFactor = Viewer.Height / height;
        double adjustedWidth = width * scaleFactor;
        w = Viewer.Width / adjustedWidth;
        double leftSpace = (Viewer.Width - adjustedWidth) / 2;
        x = -(leftSpace / Viewer.Width) * w;
    }
    _viewportOrigin = new Point(x, y);
    _viewportWidth = w;
    ResetZoom();
}

Javascript код (запускается из параметра загрузки встроенного объекта):

   function LoadImage() {
    var viewer = $("#DeepZoomViewer")[0];
    viewer.content.Bridge.SetSource(<%= Model.ZoomProperties.Width %>, <%= Model.ZoomProperties.Height %>, 256, <%=  Model.Photo.ID %>, "http://localhost:7070/TileHandler.ashx?id={0}&level={1}&x={2}&y={3}");
}

Ответы [ 2 ]

1 голос
/ 09 января 2010

Для меня строка 0 отлично заполняется, когда я устанавливаю ч / б на Авто, например:

<MultiScaleImage x:Name="Viewer" Margin="1,1,1,0" Height="Auto" Width="Auto"  />

Вы можете даже добавить строку для дополнительной меры, но это было не нужно, когда я это сделал:

<MultiScaleImage Grid.Row="0" x:Name="Viewer" Margin="1,1,1,0" Height="Auto" Width="Auto"  /> 
0 голосов
/ 06 января 2010

Попробуйте изменить определения ячеек сетки следующим образом: -

<Grid.RowDefinitions>
    <RowDefinition Height="*" />
    <RowDefinition Height="34" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
    <ColumnDefinition Width=*" />
</Grid.ColumnDefinitions>

Для элемента управления MultiscaleImage не имеет смысла указывать «естественный» размер изображения (который был бы огромным). Следовательно, он рассчитан на заданный размер или растяжение до доступного размера. Вы должны использовать * в определениях строк / столбцов для группы, чтобы гарантировать, что оставшийся доступный размер элемента управления, в котором размещается таблица, будет передан в ячейку, в которой находится элемент управления MultiscaleImage.

Редактировать

Также добавьте

VerticalAlignment="Stretch" HorizontalAlignment="Stretch"

свойства элемента управления MSI.

...