WPf 带滚动条WrapPanel 自动换行 和控件右键菜单
原文:WPf 带滚动条WrapPanel 自动换行 和控件右键菜单
技能点包括 WPf 样式的引用 数据的验证和绑定 比较适合初学者
前台:
-
<Window.Resources>
-
<local:PathToSource x:Key="n2"/>
-
<Style x:Key="{x:Type ContextMenu}" TargetType="{x:Type ContextMenu}">
-
<Setter Property="OverridesDefaultStyle" Value="True"/>
-
<Setter Property="SnapsToDevicePixels" Value="True"/>
-
<Setter Property="Template">
-
<Setter.Value>
-
<ControlTemplate TargetType="{x:Type ContextMenu}">
-
<Border Background="#CD222120" CornerRadius="7, 7, 8, 8" BorderBrush="DarkGray" BorderThickness="2" Opacity="0.96">
-
<StackPanel ClipToBounds="True" Orientation="Vertical" IsItemsHost="True" Margin="5,4,5,4"/>
-
</Border>
-
</ControlTemplate>
-
</Setter.Value>
-
</Setter>
-
</Style>
-
<ControlTemplate x:Key="{x:Static MenuItem.TopLevelItemTemplateKey}" TargetType="{x:Type MenuItem}">
-
<Border Name="Border" >
-
<Grid>
-
<ContentPresenter Margin="6,3,6,3" ContentSource="Header" RecognizesAccessKey="True" />
-
</Grid>
-
</Border>
-
</ControlTemplate>
-
-
<DataTemplate x:Key="Wrapitem">
-
<Grid Height="86" Width="86" >
-
<Grid.ContextMenu>
-
<ContextMenu Name="cm" StaysOpen="true">
-
<MenuItem Header="update"/>
-
<MenuItem Header="Save"/>
-
<MenuItem Header="SaveAs"/>
-
</ContextMenu>
-
-
</Grid.ContextMenu>
-
<Image Margin="8,8,8,24" Source="{Binding Path=Url,Converter={StaticResource n2}}"/>
-
<Label Content="{Binding Path=Text}" Height="22" Width="45" VerticalAlignment="Bottom"/>
-
</Grid>
-
-
</DataTemplate>
-
</Window.Resources>
-
<Grid>
-
<ListBox x:Name="list" Margin="124,63,109,44" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ItemTemplate="{StaticResource Wrapitem}">
-
<ListBox.Resources>
-
<Style TargetType="ListBoxItem">
-
-
<Style.Resources>
-
-
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#FFA1A1A1"/>
-
</Style.Resources>
-
</Style>
-
</ListBox.Resources>
-
-
-
<!--<ListBox.ItemsPanel >
-
<ItemsPanelTemplate>
-
<WrapPanel Orientation="Horizontal" IsItemsHost="True"/>
-
</ItemsPanelTemplate>
-
-
</ListBox.ItemsPanel>-->
-
<ListBox.Template>
-
<ControlTemplate TargetType="{x:Type ListBox}">
-
<ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
-
<WrapPanel Orientation="Horizontal" IsItemsHost="True" ScrollViewer.CanContentScroll="True"/>
-
</ScrollViewer>
-
</ControlTemplate>
-
</ListBox.Template>
-
</ListBox>
-
-
-
-
</Grid>
-
</Window>
后台:
-
/// <summary>
-
/// MainWindow.xaml 的交互逻辑
-
/// </summary>
-
public partial class MainWindow : Window
-
{
-
public MainWindow()
-
{
-
InitializeComponent();
-
load();
-
}
-
-
public void load()
-
{
-
ObservableCollection<Mean> ListMean = new ObservableCollection<Mean>()
-
{
-
new Mean(){Text="001",Url="i"},
-
new Mean(){Text="002",Url="i"},
-
new Mean(){Text="003",Url="ii"},
-
new Mean(){Text="004",Url="i"},
-
new Mean(){Text="005",Url="i"},
-
new Mean(){Text="006",Url="ii"},
-
new Mean(){Text="007",Url="i"},
-
new Mean(){Text="008",Url="i"},
-
new Mean(){Text="009",Url="i"},
-
new Mean(){Text="010",Url="i"},
-
new Mean(){Text="011",Url="ii"},
-
new Mean(){Text="012",Url="i"},
-
new Mean(){Text="013",Url="i"},
-
new Mean(){Text="014",Url="i"},
-
new Mean(){Text="015",Url="i"},
-
new Mean(){Text="016",Url="i"},
-
new Mean(){Text="017",Url="i"}
-
};
-
list.ItemsSource = ListMean;
-
}
-
}
-
public class Mean : INotifyPropertyChanged
-
{
-
private string text;
-
-
public string Text
-
{
-
get { return text; }
-
set { text = value; OnPropertyChanged("Text"); }
-
}
-
private string url;
-
-
public string Url
-
{
-
get { return url; }
-
set { url = value; OnPropertyChanged("Url"); }
-
}
-
-
public event PropertyChangedEventHandler PropertyChanged;
-
-
public void OnPropertyChanged(string propertyName)
-
{
-
-
if (PropertyChanged != null)
-
{
-
-
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
-
-
}
-
-
}
-
}
-
public class PathToSource:IValueConverter
-
{
-
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
-
{
-
-
string url = string.Format(@"/Images/{0}.jpg", (string)value=="i"?"i":"ii");
-
return new BitmapImage(new Uri(url,UriKind.Relative));
-
}
-
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
-
{
-
throw new NotImplementedException();
-
}
-
}
WPf 带滚动条WrapPanel 自动换行 和控件右键菜单的更多相关文章
- MFC小型工具通用界面框架CLIST控件+右键菜单功能
MFC-小型工具通用界面框架 0x1 场景 由于工作需要我会写代码开发工具给客户或者同事用.代码都能实现,但写个黑乎乎的命令行工具给别人用确实显得不够专业,用别人写好的成型工具又担心有后门. 所以掌握 ...
- FineUI Grid控件右键菜单的实现
FineUI官方Demo上一直没有Grid右键菜单的实现,其实从4.1.x的版本开始,允许添加自定义的事件监听(Listeners),所以要实现这个功能已经相当容易了. ExtJs右键菜单有很多种,对 ...
- win32 listctrl控件右键菜单的实现
HMENU Menu_list,Menu_all; POINT point; HINSTANCE hInstance;//下面代码放到BOOL WINAPI DialogProc下 case WM_C ...
- WPF中不规则窗体与WebBrowser控件的兼容问题解决办法
原文:WPF中不规则窗体与WebBrowser控件的兼容问题解决办法 引言 这几天受委托开发一个网络电视项目,要求初步先使用内嵌网页形式实现视频播放和选单,以后再考虑将网页中的所有功能整合进桌面程序. ...
- WPF自定义控件(五)の用户控件(完结)
用户控件,WPF中是继承自UserControl的控件,我们可以在里面融合我们的业务逻辑. 示例:(一个厌恶选择的用户控件) 后端: using iMicClassBase; using iMicCl ...
- Git使用总结 Asp.net生命周期与Http协议 托管代码与非托管代码的区别 通过IEnumerable接口遍历数据 依赖注入与控制反转 C#多线程——优先级 AutoFac容器初步 C#特性详解 C#特性详解 WPF 可触摸移动的ScrollViewer控件 .NET(C#)能开发出什么样的APP?盘点那些通过Smobiler开发的移动应用
一,原理 首先,我们要明白Git是什么,它是一个管理工具或软件,用来管理什么的呢?当然是在软件开发过程中管理软件或者文件的不同版本的工具,一些作家也可以用这个管理自己创作的文本文件,由Linus开发的 ...
- 封装:WPF中可以绑定的BindPassWord控件
原文:封装:WPF中可以绑定的BindPassWord控件 一.目的:本身自带的PassWord不支持绑定 二.Xaml部分 <UserControl x:Class="HeBianG ...
- WPF布局之让你的控件随着窗口等比放大缩小,适应多分辨率满屏填充应用
一直以来,我们设计windows应用程序,都是将控件的尺寸定好,无论窗体大小怎么变,都不会改变,这样的设计对于一般的应用程序来说是没有问题的,但是对于一些比较特殊的应用,比如有背景图片的,需要铺面整个 ...
- WPF自定义控件与样式(9)-树控件TreeView与菜单Menu-ContextMenu
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: 菜单M ...
随机推荐
- mysql5.5下载安装教程
下载地址:https://dev.mysql.com/downloads/mysql/ 这里选择的是5.5的版本: 步骤1: 步骤2: 步骤三: 步骤四: 步骤5: 步骤6: 步骤7: 步骤8: 步骤 ...
- Laravel6实现第三方 微信登录
目前很多的网站中都会存在很多的交互功能,从而降低用户的操作难度,特此带来微信的第三方登录的项目实战功能开发.对于本实例中的开发内容,就不在使用原生的内容,而是直接使用别人写好的封装的类库. 1. 安装 ...
- 构建Electron的常见问题(Mac)
背景 起因是产品的需求,需要更换Electron为底层平台,但因为会有不少定制化的功能要实现,必须自己实现此类内容,所以也就导致必须自己编译Electron的源代码. 整个构建过程,看Electron ...
- Word文档转为MD
最近整理近年的一些知识笔记,需要将一些之前用word写好的文档转为markdown格式,主要的方法是先将word转换为html格式,再将html转换为markdown格式. Step1. Word t ...
- Windows自动执行应用程序或脚本(可以通过写bat文件定时关机等)
1. Windows每天定时执行某个应用程序 1.1 右键我的电脑选择管理,并选择任务计划程序,如下 演示 --- 1.2 创建基本任务 演示 1.3 Windows每天定时关机设置参数 演示 1. ...
- 关于ssh的几个功能
这个有许多介绍的. 通过ssh可以实现远程shell命令行登录,x window登录,端口转发,scp文件复制,本地与远程命令间的管道连接,sftp文件传输与管理,包括同步,以及rsync文件同步,还 ...
- element-ui 中Switch的用法
在element-ui中,如果你想知道Switch是开还是关,使用事件 @change="getchange(value2)" 它会输出true或者false.true代表的是开, ...
- 【bzoj5339】[TJOI2018]教科书般的亵渎(拉格朗日插值/第二类斯特林数)
传送门 题意: 一开始有很多怪兽,每个怪兽的血量在\(1\)到\(n\)之间且各不相同,\(n\leq 10^{13}\). 然后有\(m\)种没有出现的血量,\(m\leq 50\). 现在有个人可 ...
- (理论知识+HTML+CSS+JavaScript)
今天分享的面试题的答案不确保一定正确,如有错误或有更好的解法,大家可以留言分享你的答案.我在留言区等你更好的答案. 一.理论基础知识部分 1.1.讲讲输入完网址按下回车,到看到网页这个过程中发生了什么 ...
- HTTP常见响应状态码及解释、常用请求头及解释
1.HTTP常见响应状态码及解释2XX Success(成功状态码) 200 表示从客户端发来的请求在服务器端被正常处理204 该状态码表示服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主 ...