4

Я изображение помещается на странице, как следоватьИспользование управления изображением с Stretch = UniformToFill - WP7

<Grid x:Name="LayoutRoot" Background="Transparent"> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="Auto"/> 
    <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

<Image Name="im" Source="/images/hqdefault.jpg" Height="250" Stretch="UniformToFill" VerticalAlignment="Center"/> 
    </Grid> 

это целая страница XAML, изображение можно загрузить с http://i.ytimg.com/vi/wNKKCHv-oOw/hqdefault.jpg

кодекса за содержит некоторые логика для обработки PageOrientation_Change

private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e) 
{ 
    if (Orientation == PageOrientation.Landscape || 
     Orientation == PageOrientation.LandscapeLeft || 
     Orientation == PageOrientation.LandscapeRight) 
    { 
     im.Height = Application.Current.Host.Content.ActualWidth; 
     im.Width = Application.Current.Host.Content.ActualHeight; 

     im.VerticalAlignment = System.Windows.VerticalAlignment.Bottom; 
     im.HorizontalAlignment = System.Windows.HorizontalAlignment.Right; 
    } 
    else 
    { 
     im.Height = 250; 
     im.Width = Application.Current.Host.Content.ActualWidth; 
    } 
    } 

Если кто-то может попробовать это он/она может обнаружить, что StrechToFill обрезает содержимое изображения от дна, где, как я я ожидаю, что он будет обрезать его сверху и снизу одинаково и сохранить содержимое изображения в центре управления изображениями.

HOUSE Я сделал себе ясный, если нет, подумайте о том, чтобы сделать образец из предоставленного кода. Большое спасибо.

ответ

8

Основная проблема заключалась в установлении высоты или ширины в элементе управления Image, теперь я хорошо знаю, что не должен иметь значение heigh или width для элемента управления изображением или для элемента мультимедиа. если вам нужна фиксированная высота, например, в портретном режиме, вы можете поместить ее в элемент управления сеткой и установить ее высоту или ширину. следующий код, который работал для меня.

<Grid Name="grdMedia" 
     Grid.Row="1" 
     VerticalAlignment="Stretch" 
     HorizontalAlignment="Stretch" 
     Height="250"> 
<Image Name="imThumbnail" 
     Grid.Row="1" 
     Stretch="UniformToFill" 
     HorizontalAlignment="Center" 
     VerticalAlignment="Center"/> 
</Grid> 

И следующий код, если вы хотите изменить эту картинку на весь экран в ландшафтном режиме

private void SetUIInLandscape() 
    { 
     SystemTray.IsVisible = false; 

     //Do not change the height or width of image control nor its alignments 
     //Hide every thing else 

     grdMedia.Height = Application.Current.Host.Content.ActualWidth; 
     grdMedia.Width = Application.Current.Host.Content.ActualHeight; 

    } 

    private void SetUIInPortrait() 
    { 
     SystemTray.IsVisible = true; 

     //Do not change the height or width of image control nor its alignments 
     //Make every thing else visible 

     grdMedia.Height = 250; 
     grdMedia.Width = Application.Current.Host.Content.ActualWidth; 
    } 
3
<Grid x:Name="LayoutRoot" Background="Transparent"> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="Auto"/> 
    <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

<Image Name="im" Source="/images/hqdefault.jpg" Height="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Center"/> 
</Grid> 

попробуйте это, тогда вам не нужно ничего делать в событии PhoneApplicationPage_OrientationChanged.

+0

здесь вещь, когда я установить Stretch = UniformToFill это делает его дно Aligned вместо центра. –

+0

Я думаю, что если вы просто удалите его, все будет в порядке .. попробуйте удалить его, набирая только то, что я упомянул. – Apoorva

+0

Высота = «Авто» на изображении не будет работать – thumbmunkeys