如何在C#中使用Image控件

这篇文章给大家介绍如何在C#中使用Image控件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

首先是View层,比较简单:

如何在C#中使用Image控件

<GridGrid.Row="1">
<ImageSource="{BindingPath=LTEModel.ImgSource,Converter={StaticResourceMyImageConverter}}"Stretch="Fill">
</Image>
</Grid>

然后我们再来看看Model层也很简单。

publicclassLTEModel:BaseModel
{
privatestring_imageSource=null;
publicstringImgSource
{
get
{
return_imageSource;
}
set
{
if(value!=_imageSource)
{
_imageSource=value;
FirePropertyChanged("ImgSource");
}
}
}
}

然后就是重要的转换器:

publicclassStringToImageSourceConverter:IValueConverter
{
#regionConverter

publicobjectConvert(objectvalue,TypetargetType,objectparameter,CultureInfoculture)
{
stringpath=(string)value;
if(!string.IsNullOrEmpty(path))
{
returnnewBitmapImage(newUri(path,UriKind.Absolute));
}
else
{
returnnull;
}
}

publicobjectConvertBack(objectvalue,TypetargetType,objectparameter,CultureInfoculture)
{
returnnull;
}
#endregion
}

然后就是重要的转换器:

publicclassStringToImageSourceConverter:IValueConverter
{
#regionConverter

publicobjectConvert(objectvalue,TypetargetType,objectparameter,CultureInfoculture)
{
stringpath=(string)value;
if(!string.IsNullOrEmpty(path))
{
returnnewBitmapImage(newUri(path,UriKind.Absolute));
}
else
{
returnnull;
}
}

publicobjectConvertBack(objectvalue,TypetargetType,objectparameter,CultureInfoculture)
{
returnnull;
}
#endregion
}

转换器返回的是Object类型,实际返回的是一个BitmapImage对象。所以我们在写程序绑定的时候一定要弄清绑定的目标和对象之间的关系,这个是非常重要的。

下面就是在ViewModel层中来添加绑定,并更新数据源,这里使用的是一个定时器来定时更新数据源:

publicclassLTEViewModel:NotifyObject
{
privateDispatcherTimermyDispatcher=null;
privateRandomrandom=newRandom();
publicLTEViewModel()
{
GetImageSource();
InitTimer();
}

privateLTEModel_lteModel=null;
publicLTEModelLTEModel
{
get
{
if(_lteModel==null)
{
_lteModel=newLTEModel();
}
return_lteModel;
}
set
{
if(value!=_lteModel)
{
_lteModel=value;
FirePropertyChanged("LTEModel");
}
}
}

privateBaseModel_baseModel=null;
publicBaseModelBaseModelInstance
{
get
{
if(_baseModel==null)
{
_baseModel=newBaseModel()
{
Title="分地区LTE分布",
Time=DateTime.Now.ToString()
};
}
return_baseModel;
}
set
{
if(value!=_baseModel)
{
_baseModel=value;
FirePropertyChanged("BaseModelInstance");
}
}
}

privateList<string>imgList=newList<string>();
privatevoidGetImageSource()
{
//通过程序集来读取相应的资源的路径
stringassemblyLocation=this.GetType().Assembly.Location;
stringassLocation=assemblyLocation.Substring(0,assemblyLocation.LastIndexOf("\\"));
string[]img_files=Directory.GetFiles(string.Format("{0}\\Images",assLocation),"*.JPG");
foreach(stringimg_pathinimg_files)
{
imgList.Add(img_path);
}
}

privatevoidInitTimer()
{
myDispatcher=newDispatcherTimer();
myDispatcher.Tick+=newEventHandler(Timer_Tick);
myDispatcher.Interval=TimeSpan.FromMilliseconds(1000);
myDispatcher.Start();
}

privatevoidTimer_Tick(objectsender,EventArgse)
{
intimageIndex=0;
if(imgList.Count>0&&LTEModel!=null)
{
imageIndex=random.Next(0,imgList.Count);
LTEModel.ImgSource=imgList[imageIndex];
}
if(_baseModel!=null)
{
_baseModel.Time=DateTime.Now.ToString();
}
}
}

然后就是实例化一个ViewModel对象绑定到前台中,这个思路其实是相当明确的。

其实在我们的很多时候,我们并不知道我们需要绑定什么图片,或者说根据数据类型来绑定图片,这个在定义数据模板的时候经常使用到,下面就介绍一下,根据类型来绑定相应的图片。然后通过定义

publicenumDeviceType
{  
  SheXiangJi,
  KaKou,
  DianZiJingCha,
  MingJin
}

这种类型,通过不同的类型来绑定到不同的图片,这个也是一个非常重要的应用,我们一定要注意使用的方法,这里只是简单介绍一下。

<ItemsControlItemsSource="{BindingDeviceList,RelativeSource={RelativeSourceTemplatedParent}}"Grid.Row="2">
<ItemsControl.Template>
<ControlTemplateTargetType="ItemsControl">
<UniformGridColumns="3"Rows="7"IsItemsHost="True"></UniformGrid>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanelOrientation="Horizontal"HorizontalAlignment="Left"Margin="20000"VerticalAlignment="Center"SnapsToDevicePixels="True">
<Imagex:Name="icon1"Width="48"Height="48"RenderOptions.BitmapScalingMode="NearestNeighbor"VerticalAlignment="Center"></Image>
<TextBlockMargin="10000"Foreground="#fff"ToolTip="{BindingName}"FontSize="40"Text="{BindingName}"HorizontalAlignment="Left"VerticalAlignment="Center"></TextBlock>
</StackPanel>
<DataTemplate.Triggers>
<DataTriggerBinding="{BindingType}"Value="SheXiangJi">
<SetterProperty="Source"Value="/IGisControls.JTJ.UIControls;component/images/camera.png"TargetName="icon1"></Setter>
</DataTrigger>
<DataTriggerBinding="{BindingType}"Value="KaKou">
<SetterProperty="Source"Value="/IGisControls.JTJ.UIControls;component/images/Bayonet.png"TargetName="icon1"></Setter>
</DataTrigger>
<DataTriggerBinding="{BindingType}"Value="DianZiJingCha">
<SetterProperty="Source"Value="/IGisControls.JTJ.UIControls;component/images/epolice.png"TargetName="icon1"></Setter>
</DataTrigger>
<DataTriggerBinding="{BindingType}"Value="MingJin">
<SetterProperty="Source"Value="/IGisControls.JTJ.UIControls;component/images/Police_A.png"TargetName="icon1"></Setter>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

另外和Image很类似的就是<ImageBrush ImageSource="/IGisControls.JTJ.UIControls;component/images/screenBG.jpg" Stretch="Fill"></ImageBrush>

用法也差不多,同样可以通过绑定的方式来添加图片,不过在使用的时候还是需要注意一下就是设置当前图片的生成操作为Resource。

关于如何在C#中使用Image控件就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

发布于 2021-03-02 23:49:30
收藏
分享
海报
0 条评论
178
上一篇:在java中使用static时需要注意哪些问题 下一篇:如何在python线程中使用threading.Thread()函数
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码