Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使图像使用它';s全宽,同时保持';Xamarin形式的正常高度是多少?_C#_Xaml_Xamarin_Xamarin.forms - Fatal编程技术网

C# 如何使图像使用它';s全宽,同时保持';Xamarin形式的正常高度是多少?

C# 如何使图像使用它';s全宽,同时保持';Xamarin形式的正常高度是多少?,c#,xaml,xamarin,xamarin.forms,C#,Xaml,Xamarin,Xamarin.forms,在使图像保持正常高度的同时,使其适合屏幕宽度存在很大问题。我从数据库中收集不同的图像(取决于您之前单击的内容),因此图像的高度/宽度始终不同。如何使图像始终填充屏幕宽度,同时保持正常高度 现在,一些图像填充宽度,同时保持正常高度,而一些图像不填充 我所尝试的: AspectFill裁剪出部分图像,因此此解决方案不起作用 Fill拉伸图像,这也不是一个好的解决方案 theimage.WidthRequest=App.ScreenWidth我也尝试过这样做来解决这个问题,我从AppDelegete获

在使图像保持正常高度的同时,使其适合屏幕宽度存在很大问题。我从数据库中收集不同的图像(取决于您之前单击的内容),因此图像的高度/宽度始终不同。如何使图像始终填充屏幕宽度,同时保持正常高度

现在,一些图像填充宽度,同时保持正常高度,而一些图像不填充

我所尝试的:

AspectFill
裁剪出部分图像,因此此解决方案不起作用

Fill
拉伸图像,这也不是一个好的解决方案

theimage.WidthRequest=App.ScreenWidth
我也尝试过这样做来解决这个问题,我从AppDelegete获得了屏幕宽度,但是图像根本没有改变它的宽度

然后我还尝试添加一个grid.column,如下所示:

<Grid.RowDefinitions>

<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>

</Grid.RowDefinitions>

<Grid.ColumnDefinitions>

<ColumnDefinition x:Name = "width"/>

</Grid.ColumnDefinitions>

<Image x:Name="theimage" Grid.Row="1" Grid.Column = "0"  HorizontalOptions = "StartAndExpand" VerticalOptions = "StartAndExpand" />
width.Width = App.ScreenWidth;
但有些图像保持不变,无法填满屏幕宽度

我是否必须使用自定义渲染器才能成功地使图像填充屏幕宽度,同时保持正常高度

这是我当前的代码(我用上面的代码示例更改了一百万次):



我现在没有办法解决这个问题了。我必须做渲染器才能使它工作吗

最好的选择是让您学习如何使用MVVM。(虽然很难,但值得一试)

你能做的就是

查看

<Image Source="{Binding ImageSource,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged }" Width="100" Height="{Binding SourceImageHeight,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"></Image>
视图模型

public class YourViewModel
{
  private String _imageSource = "";

  public String ImageSource
  {
   get{return _imageSource;}
   set{_imageSource = value;
       NotifyPropertyChanged(m => m.ImageSource);
      }
  }

  private Int _sourceImageHeight = 0;

  public Int SourceImageHeight 
  {
   get{return _sourceImageHeight ;}
   set{_sourceImageHeight = value;
       NotifyPropertyChanged(m => m.SourceImageHeight);
      }
  }
}
从这里你要做的就是

ImageSource = ImageLocation


注意:在Viewmodel中,如果不使用私有变量(\u imageSource/\u sourceImageHeight),而是在setter中使用公共变量名(imageSource/sourceImageHeight),则将创建一个无限循环。

确定。我会调查的!谢谢如果你知道怎么做,我将非常感谢一些更多的代码,以便看到一个完整的solution@UnoDosCode我又添加了一点:)我找不到使用System.ComponentModel添加的
NotifyPropertyChanged
但是我可以在线找到INotifyPropertyChangedNotifyPropertyChanged是Nuget包SimpleMVVM的一部分。它使代码更干净。好的,添加MvvmLight!我需要键入什么才能将其添加到我的页面<代码>使用
public class YourViewModel
{
  private String _imageSource = "";

  public String ImageSource
  {
   get{return _imageSource;}
   set{_imageSource = value;
       NotifyPropertyChanged(m => m.ImageSource);
      }
  }

  private Int _sourceImageHeight = 0;

  public Int SourceImageHeight 
  {
   get{return _sourceImageHeight ;}
   set{_sourceImageHeight = value;
       NotifyPropertyChanged(m => m.SourceImageHeight);
      }
  }
}
ImageSource = ImageLocation
SourceImageHeight = 1200