掌握WPF控件:熟练常用属性(五)
Image
是一种在WPF应用程序中显示图片的方式。它可以用于显示静态图片,也可以用于显示动态图片,如GIF。此外,Image控件还可以自适应大小,根据容器的大小自动调整图片大小。
常用属性 描述 Source 用于设置或获取图像的源,可以是Uri、BitmapImage、BitmapFrame或其他派生自ImageSource的类型。 默认值是 null Stretch 用于设置或获取在Image控件中如何拉伸图像以适合控件大小。默认值为 Uniform。可选值包括None(保存不变化)、Fill(调整大小填充目标)、Uniform(保持原有的纵横比例填充目标)和UniformToFill(保持原有的纵横比,如目标纵横比不同矩形的纵横比时则剪裁源内容。)。 StretchDirection 用于设置或获取Stretch属性的方向。默认值为Both。可选值有:Both(拉伸适应父级)、UpOnly(内容仅在小于父级时扩展,大于时不变化)和DownOnly(内容仅在大于父级时缩放,如果内容交小时,不变化)。 Opacity 用于设置图像的透明度,取值范围为0(完全透明)到1(完全不透明)。 Width 用于设置图像的宽度。 Height 用于设置图像的高度。 Clip 用于定义元素内容轮廓的几何图形。
下面写个例子 注意图片属性生成操作要设置为资源,否则会出现图片不显示问题
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<!--用Source属性来设置图片资源-->
<Image Grid.Row="0" Source="./1.png" />
<!--用Stretch属性来把图片拉伸填充到矩形,并且设置StretchDirection 拉伸方向并设置宽度200,高度50-->
<Image Grid.Row="1" Width="200" Height="50" Source="./1.png" Stretch="Fill" StretchDirection="UpOnly"/>
<!--利用裁剪的方式把图片裁剪成三角形,并设置透明度-->
<Image Grid.Row="2" Name="starImage" Source="./1.png" Stretch="Uniform" Opacity="0.5" >
<Image.RenderTransform>
<TransformGroup>
<!--这里设置了旋转45度-->
<RotateTransform Angle="45" />
</TransformGroup>
</Image.RenderTransform>
<Image.Clip>
<GeometryGroup>
<RectangleGeometry Rect="0,0,100,100" />
<PathGeometry>
<PathFigure StartPoint="0,0">
<LineSegment Point="100,100" />
<LineSegment Point="0,100" />
<LineSegment Point="0,0" />
</PathFigure>
</PathGeometry>
</GeometryGroup>
</Image.Clip>
</Image>
</Grid>
ListBox
是一个常用的列表控件,用于显示一个可滚动的项目列表。
常用属性 描述 ItemsSource 用于绑定数据源集合,用于获取或设置ListBox中所显示的项的来源。 SelectedItem 用于获取或设置ListBox中所单选的项。 SelectedItem 用于获取或设置ListBox中所多选的项。 ItemTemplate 用于定义ListBox中每个项的展示模板,允许自定义每个项目的显示方式。 AnchorItem 用于获取或设置当 SelectionMode 为 Extended 时最初选择的项。 HandlesScrolling 用于获取一个值,该值之时 ListBox 是否支持滚动。如果 ListBox 支持滚动为true,否则为false。 SelectedItems 用于获取当前选定的项,返回当前选定项的集合。 SelectionMode 用于获取或设置 ListBox 的选择模式。默认值为单选。可选择值有:Extended(表示可以按下 Shift 键来选择多个项)、Multiple(表示可以选择多个项)、Single(单选表示只能选择一项)。
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<!--最简单的选项-->
<ListBox x:Name="myListBox1" Grid.Row="0" HorizontalAlignment="Center" Width="200" SelectionChanged="myListBox1_SelectionChanged">
<ListBoxItem Content="我是ListBox选项1"/>
<ListBoxItem Content="我是ListBox选项2"/>
<ListBoxItem Content="我是ListBox选项3"/>
<ListBoxItem Content="我是ListBox选项4"/>
<ListBoxItem Content="我是ListBox选项5"/>
<ListBoxItem Content="我是ListBox选项6"/>
<ListBoxItem Content="我是ListBox选项7"/>
<ListBoxItem Content="我是ListBox选项8"/>
</ListBox>
<TextBlock x:Name="myListBoxTextBlock1" Grid.Row="1" FontSize="16" Height="25" Width="230" Background="Blue" Foreground="White"/>
<!--动态加载数据-->
<!--设置SelectionMode为Multiple 表示可以多选-->
<ListBox x:Name="myListBox2" Grid.Row="2" HorizontalAlignment="Center" Width="200" Margin="0,20,0,0" SelectionMode="Multiple" SelectionChanged="myListBox2_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name}" Margin="0,0,5,0"/>
<TextBlock Text="{Binding Path=Age}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBlock x:Name="myListBoxTextBlock2" Grid.Row="3" Height="25" Width="200" FontSize="16" Background="Green" Foreground="White"/>
</Grid>
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Controls;
namespace WpfCommonControls
{
/// <summary>
/// ListBox.xaml 的交互逻辑
/// </summary>
public partial class ListBox : Window
{
public ListBox()
{
InitializeComponent();
//
LoadData();
}
public void LoadData()
{
ObservableCollection<Person> items = new ObservableCollection<Person>
{
new Person { Name = "John", Age = 25 },
new Person { Name = "Jane", Age = 30 },
new Person { Name = "Doe", Age = 35 }
};
//绑定数据
myListBox2.ItemsSource = items;
}
private void myListBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// 单选
if (myListBox1.SelectedItem != null)
{
ListBoxItem? lbi = myListBox1.SelectedItem as ListBoxItem;
myListBoxTextBlock1.Text = $"你选择了: {lbi?.Content}";
}
}
private void myListBox2_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//多选
myListBoxTextBlock2.Text = $"你选择了: {myListBox2.SelectedItems.Count}项";
}
}
public class Person
{
public string? Name { get; set; }
public int Age { get; set; }
}
}
ProgressBar
常用属性 描述 Value 用于表示进度条的当前值,范围从0到100。 Maximum 用于表示进度条的最大值。默认是100。 Minimum IsIndeterminate 用于表示操作正在进行但无法给出具体进度。如果设置为 true,则进度条会不停的动 Orientation 用于指定进度条的方向。可以是水平或垂直。 Template 用于自定义进度条的外观。 Background 用于设置进度条的背景色。 Foreground 用于色湖之进度条的前景色,通常是表示进度的颜色。 BorderBrush 和 BorderThickness 分别用来设置进度条边框的颜色和厚度。
<Window.Resources>
<!--定义窗体级别资源样式-->
<Style x:Key="myProgressBarStyle" TargetType="{x:Type ProgressBar}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ProgressBar}">
<Grid x:Name="TemplateRoot" SnapsToDevicePixels="true">
<Rectangle x:Name="PART_Track" Fill="{TemplateBinding Background}" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="{TemplateBinding BorderThickness}" RadiusX="2" RadiusY="2"/>
<Rectangle x:Name="PART_Indicator" HorizontalAlignment="Left" Fill="{TemplateBinding Foreground}" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="{TemplateBinding BorderThickness}" RadiusX="2" RadiusY="2">
<Rectangle.LayoutTransform>
<ScaleTransform ScaleX="{Binding Value, RelativeSource={RelativeSource TemplatedParent}}" ScaleY="1"/>
</Rectangle.LayoutTransform>
</Rectangle>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<!--设置了进度条的最大值100,当前进度为70-->
<ProgressBar Grid.Row="0" Width="200" Height="25" Maximum="100" Value="75" />
<!--设置了属性IsIndeterminate为true,则显示动态,设置进度条方向Orientation为Vertical 表示垂直-->
<ProgressBar Grid.Row="1" IsIndeterminate="true" Background="LightGray" Foreground="Coral" Width="200" Height="25" Orientation="Vertical"/>
<!--这里使用窗体级别资源来显示样式-->
<ProgressBar Grid.Row="2" x:Name="progressBar" Width="200" Height="25" Value="5" Maximum="100" Style="{StaticResource myProgressBarStyle}"/>
</Grid>
公众号“点滴分享技术猿 ”