2010-01-06 4 views
3

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

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

EDIT: Вот полная картина ... 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 код (запускается из OnLoad PARAM внедренного объекта):

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}"); 
} 
+0

Отредактировал свой ответ. – AnthonyWJones

+0

Если бы это было так, я бы назвал это ответом. –

ответ

0

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

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

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

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

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

VerticalAlignment="Stretch" HorizontalAlignment="Stretch" 

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

+0

Нет ... нет радости здесь. Я думал, что вы будете правы, но MSI по-прежнему не имеет высоты или ширины. –

+0

Nope ... без изменений. Если я привязываю к нему текстовый блок для ширины, он всегда показывает 0:

1

Он заполняет строку 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

Не делает Работа. Должно быть что-то более глубокое в моей проблеме. У меня есть Javascript-вызов для установки источника изображения (через мост), который должен запускаться в параметре onload объекта. Опять же, он работает, когда у меня установлен явный набор высоты/ширины. –

+0

Рассмотрите возможность размещения большего количества вашего кода, включая вызов js и другие элементы, которые могут быть полезны при воспроизведении проблемы. –